Your SlideShare is downloading. ×
Úvod do programování 5
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Úvod do programování 5

1,970
views

Published on

Objektově orientované programování

Objektově orientované programování

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,970
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Úvod do programování aneb Do nitra stroje PŘEDNÁŠKA Karel Minařík 5
  • 2. 1 Opakování Úvod do programování
  • 3. ZÁKLADNÍ KONCEPTY 1. Datové typy: čísla, texty, pole, hashe; Přetypování 2. Proměnné a rozsah platnosti 3. Metody a funkce 4. Podmínky a logické operátory 5. Smyčky a iterátory 6. Výjimky — ošetření chyb 7. Vstup 8. Výstup Úvod do programování Přednáška 5
  • 4. vyjimky.rb require 'net/http' server = 'www.lidovky.cz' # vs. www.neexistuje.cz nebo vytazeny sitovy kabel... begin response, data = Net::HTTP.new(server).get('/') rescue Exception puts quot;Nemohu se připojit na server #{server}quot; # ...načteme data uložená na disku... # data = ... end puts data.to_s.scan( /<div class=quot;art openerquot;><h3><a href=quot;.+quot;>(.*)</a></h3>/).to_s ) if data Úvod do programování Přednáška 5
  • 5. parsovani_html.rb require 'rubygems' require 'hpricot' require 'open-uri' require 'iconv' server = 'http://www.lidovky.cz' # vs. www.neexistuje.cz nebo vytazeny sitovy kabel... begin html = Hpricot( open(server) ) rescue Exception puts quot;Nemohu se připojit na server #{server}...quot; exit end html.search('div.art.opener h3 a').inner_html titulek = puts Iconv.iconv( 'utf-8', 'windows-1250', titulek ) Úvod do programování Přednáška 5
  • 6. parsovani_html.rb require 'rubygems' require 'hpricot' require 'open-uri' require 'iconv' server = 'http://www.lidovky.cz' # vs. www.neexistuje.cz nebo vytazeny sitovy kabel... begin Hpricot( html = open(server) ) rescue Exception puts quot;Nemohu se připojit na server #{server}...quot; exit end html.search('div.art.opener h3 a').inner_html titulek = puts Iconv.iconv( 'utf-8', 'windows-1250', titulek ) http://code.whytheluckystiff.net/hpricot/ www.igvita.com/blog/2007/02/04/ruby-screen-scraper-in-60-seconds/ Úvod do programování Přednáška 5
  • 7. nejpouzivanejsi_slovo.rb text = File.read 'kafka_promena.txt' # ---> A ted neco trochu jineho... Najdeme nejpouzivanejsi slovo :) words = text.tr('-,();'quot;', '').split(' ') current_word = words.sort.first word_counts = {} word_counts[current_word] = {} count = 0 words.sort.each do |word| if word == current_word count += 1 else count = 1 current_word = word end word_counts[word] = {:word => word, :count => count} Když se Řehoř Samsa end nejpouzivanejsi = word_counts.sort.first # quot;Nejvetsi = prvniquot; -- [quot;Aquot;, {:count=>37, :word=>quot;Aquot;}] nepokojných snů, shle puts quot;Začínáme s quot; + nejpouzivanejsi[1][:word].to_s + quot;.quot; word_counts.sort.each do |word| proměnil v jakýsi nestv nejpouzivanejsi = word if word[1][:count] > nejpouzivanejsi[1][:count] end puts quot;Nejpoužívanější slovo je „quot; + nejpouzivanejsi[1][:word] + quot;“ s quot; + nejpouzivanejsi[1][:count].to_s + quot; výskyty.quot; Úvod do programování Přednáška 5
  • 8. seznam_nejpouzivanejsich_slov.rb text = File.read 'kafka_promena.txt' # ---> ... a co seznam slov podle frekvence pouziti? puts quot;Seznam nejpoužívanějších slov v Kafkově ‚Proměně‘:quot; most_frequent_words = word_counts.values.collect { |word| [word[:count], word [:word]] } most_frequent_words.sort.reverse.each_with_index do |word, i| puts quot;#{i+1}. #{word[1]}ttt(#{word[0]} výskytů)quot; end Když se Řehoř Samsa nepokojných snů, shle proměnil v jakýsi nestv Úvod do programování Přednáška 5
  • 9. nejpouzivanejsi_slovo.rb 1 text = File.read 'kafka_promena.txt' # ---> A ted neco trochu jineho... Najdeme nejpouzivanejsi slovo :) words = text.tr('-,();'quot;', '').split(' ') current_word = words.sort.first 2 word_counts = {} word_counts[current_word] = {} count = 0 words.sort.each do |word| if word == current_word count += 1 3 else count = 1 current_word = word end word_counts[word] = {:word => word, :count => count} Když se Řehoř Samsa end nejpouzivanejsi = word_counts.sort.first # quot;Nejvetsi = prvniquot; -- [quot;Aquot;, {:count=>37, :word=>quot;Aquot;}] nepokojných snů, shle puts quot;Začínáme s quot; + nejpouzivanejsi[1][:word].to_s + quot;.quot; word_counts.sort.each do |word| proměnil v jakýsi nestv nejpouzivanejsi = word if word[1][:count] > nejpouzivanejsi[1][:count] 4 end puts quot;Nejpoužívanější slovo je „quot; + nejpouzivanejsi[1][:word] + quot;“ s quot; + nejpouzivanejsi[1][:count].to_s + quot; výskyty.quot; Úvod do programování Přednáška 5
  • 10. „Křehký kód“ „Fragile code“ Úvod do programování Přednáška 5
  • 11. 2 Objektově orientované programování Úvod do programování
  • 12. 1. Nalít olej do pánve 2. Zapálit plyn 3. Vzít vejce 4. Rozklepnout vejce o okraj pánve Úvod do programování Přednáška 5
  • 13. 1. Nalít olej do pánve 2. Zapálit plyn 3. Vzít vejce, sůl a pepř 4. Rozklepnout vejce o okraj pánve Úvod do programování Přednáška 5
  • 14. „Udržovatelnost“ software Znovu-použití Re-usability Rozšiřitelnost Úvod do programování Přednáška 5
  • 15. Košík Produkty Objednávky Diskuse Platby Úvod do programování Přednáška 5
  • 16. Customer.php ~500 řádků kódu Košík Produkty Objednávky Diskuse Platby Úvod do programování Přednáška 5
  • 17. Customer.php ~500 řádků kódu Košík Produkty Objednávky Diskuse Platby Úvod do programování Přednáška 5
  • 18. ZÁKLADNÍ KONCEPTY OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ (OOP) 1. Zapouzdření Encapsulation 2. Modulárnost Modularity 3. Dědičnost Inheritance 4. Rozhraní Interface 5. Abstraktnost Abstraction 6. Polymorfie Polymorfism Úvod do programování Přednáška 5
  • 19. „Formičky“
  • 20. Zvíře Pes Ovce Úvod do programování Přednáška 5
  • 21. animals.rb 1 require 'pp' 2 3 # *** ANIMALS ***************************************************************** 4 5 #-- file Animal.rb 6 class Animal 7 8 attr_accessor :name, :position, :color 9 10 def initialize(name) 11 @name = name 12 @position = 0 13 @stuff_in_belly = 0 14 @walk_increment = 1 15 @run_increment = 10 16 puts quot;Hello, I am a #{self.class.to_s.downcase} named #{self.name}!quot; 17 end 18 19 def talk 20 puts quot;#{self.class}: ...quot; 21 22 end 23 Úvod do programování Přednáška 5
  • 22. animals.rb 24 def walk 25 @position += @walk_increment 26 end 27 28 def run 29 @position += @run_increment 30 end 31 32 def feed 33 @stuff_in_belly += 1 34 puts quot;[Chewing on some stuff and happy...]quot; 35 self.poop if @stuff_in_belly > 3 36 end 37 38 def hungry? 39 if @stuff_in_belly < 2 40 true 41 else 42 false 43 end 44 end 45 Úvod do programování Přednáška 5
  • 23. animals.rb 46 protected 47 48 def poop 49 puts quot;[Too much stuff in belly... pooping...]quot; 50 @stuff_in_belly = 0 51 end 52 53 end 54 55 Úvod do programování Přednáška 5
  • 24. animals.rb 56 #-- file Dog.rb 57 class Dog < Animal 58 59 def initialize(name, color) 60 super(name) 61 @color = color 62 @run_increment = 20 63 64 end 65 66 def talk 67 puts quot;#{self.name}: Woof! woof!quot; 68 end 69 70 def fetch(what='stick') 71 puts quot;[#{self.name} is fetching the #{what.downcase}...]quot; 72 end 73 74 end 75 76 Úvod do programování Přednáška 5
  • 25. animals.rb 77 #-- file Sheep.rb 78 class Sheep < Animal 79 80 def talk 81 puts quot;#{self.name}: Beeeeee!quot; 82 end 83 84 end 85 Úvod do programování Přednáška 5
  • 26. animals.rb 86 # === Dog ===================================================================== 87 88 # --- Create a dog 89 dog = Dog.new('Bitzer', 'yellow') 90 pp dog 91 92 # --- Dog's properties (attributes) 93 puts quot;Our dog's name is '#{dog.name}'.quot; 94 puts quot;And his color is #{dog.color}.quot; 95 Úvod do programování Přednáška 5
  • 27. animals.rb 96 # --- Make the dog do something 97 puts quot;> Talk, Bitzer!quot; 98 dog.talk 99 100 puts quot;> Fetch, Bitzer!quot; 101 dog.fetch 102 dog.fetch('Ball') 103 104 puts quot;> Walk, Bitzer!quot; 105 dog.walk 106 puts quot;Dog is at position: #{dog.position}.quot; 107 puts quot;> Run, Bitzer!quot; 108 dog.run 109 puts quot;Dog is at position: #{dog.position}.quot; 110 111 puts quot;> Have a snack, Bitzer!quot; 112 dog.feed 113 puts dog.hungry? 114 115 dog.feed 116 dog.feed 117 puts dog.hungry? 118 119 # dog.poop 120 dog.feed 121 122 Úvod do programování Přednáška 5
  • 28. animals.rb 123 puts quot;n---nnquot; 124 # === Sheep =================================================================== 125 126 sheep = Sheep.new('Shaun') 127 pp sheep 128 129 sheep.talk 130 131 puts sheep.position 132 sheep.run 133 puts sheep.position 134 135 # sheep.fetch Úvod do programování Přednáška 5
  • 29. http://ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html Úvod do programování Přednáška 5
  • 30. DOMÁCÍ ÚKOL Navrhněte a naprogramujte třídu TextAnalyzer TextAnalyzer: text • • characters • words • pages • unique_words • most_frequent_words • most_frequent_word Úvod do programování Přednáška 5
  • 31. Návrhové vzory Design patterns Úvod do programování Přednáška 5
  • 32. PŘÍKLAD Návrhový vzor ActiveRecord tabulka people ID Name Surname E-mail 1 John Smith smith@hotmail.com 2 Susanna Reddick susan@yahoo.com INSERT INTO people (name, surname, email) VALUES( 'John', 'Smith', 'smith@hotmail.com' ); SELECT * FROM people; SELECT * FROM people WHERE id = 1; SELECT * FROM people WHERE surname = 'Smith'; # ActiveRecord::Base.establish_connection .. Person.create(:name => 'John', :surname => 'Smith', :email => 'smith@hotmail.com') Person.find(:all) Person.find(1) Person.find_by_name('Smith') Úvod do programování Přednáška 5
  • 33. PŘÍKLAD Návrhový vzor ActiveRecord require 'rubygems' require_gem 'activerecord' require 'pp' ActiveRecord::Base.establish_connection( :adapter => 'sqlite3', :database => 'active_record_test.db') ActiveRecord::Base.connection.execute('CREATE TABLE quot;peoplequot; ( id INTEGER PRIMARY KEY NOT NULL, name VARCHAR (255), surname VARCHAR(255), email VARCHAR(255) )') class Person < ActiveRecord::Base end Person.create( :name => 'John', :surname => 'Smith', :email => 'smith@hotmail.com' ) Person.create( :name => 'Susanna', :surname => 'Reddick', :email => 'susan@hotmail.com' ) pp Person.find(:all) puts quot;nquot; pp Person.find(1) puts quot;nquot; pp Person.find_by_surname('Smith') puts quot;nquot; Úvod do programování Přednáška 5
  • 34. MODELOVÁNÍ Unified Modeling Language (UML) Úvod do programování Přednáška 5
  • 35. Děkuji! 