Úvod do programování 5

  • 1,933 views
Uploaded on

Objektově orientované programování

Objektově orientované programování

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,933
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
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! 