• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Úvod do programování 5
 

Úvod do programování 5

on

  • 3,054 views

Objektově orientované programování

Objektově orientované programování

Statistics

Views

Total Views
3,054
Views on SlideShare
3,053
Embed Views
1

Actions

Likes
0
Downloads
15
Comments
0

1 Embed 1

http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Úvod do programování 5 Úvod do programování 5 Presentation Transcript

    • Úvod do programování aneb Do nitra stroje PŘEDNÁŠKA Karel Minařík 5
    • 1 Opakování Úvod do programování
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • „Křehký kód“ „Fragile code“ Úvod do programování Přednáška 5
    • 2 Objektově orientované programování Úvod do programování
    • 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
    • 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
    • „Udržovatelnost“ software Znovu-použití Re-usability Rozšiřitelnost Úvod do programování Přednáška 5
    • Košík Produkty Objednávky Diskuse Platby Úvod do programování Přednáška 5
    • Customer.php ~500 řádků kódu Košík Produkty Objednávky Diskuse Platby Úvod do programování Přednáška 5
    • Customer.php ~500 řádků kódu Košík Produkty Objednávky Diskuse Platby Úvod do programování Přednáška 5
    • 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
    • „Formičky“
    • Zvíře Pes Ovce Úvod do programování Přednáška 5
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • http://ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html Úvod do programování Přednáška 5
    • 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
    • Návrhové vzory Design patterns Úvod do programování Přednáška 5
    • 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
    • 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
    • MODELOVÁNÍ Unified Modeling Language (UML) Úvod do programování Přednáška 5
    • Děkuji! 