+ All Categories
Home > Technology > Úvod do programování 5

Úvod do programování 5

Date post: 22-Apr-2015
Category:
Upload: karel-minarik
View: 3,163 times
Download: 1 times
Share this document with a friend
Description:
Objektově orientované programování
35
Úvod do programování aneb Do nitra stroje Karel Minařík PŘEDNÁŠKA 5
Transcript
Page 1: Úvod do programování 5

Úvod do programování aneb Do nitra stroje

Karel MinaříkPŘEDNÁŠKA 5

Page 2: Úvod do programování 5

Úvod do programování

Opakování1

Page 3: Úvod do programování 5

Úvod do programování Přednáška 5

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

Page 4: Úvod do programování 5

Úvod do programování Přednáška 5

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 "Nemohu se připojit na server #{server}" # ...načteme data uložená na disku... # data = ...endputs data.to_s.scan( /<div class="art opener"><h3><a href=".+">(.*)<\/a><\/h3>/).to_s ) if data

vyjimky.rb

Page 5: Úvod do programování 5

Úvod do programování Přednáška 5

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 "Nemohu se připojit na server #{server}..." exitend

titulek = html.search('div.art.opener h3 a').inner_html

puts Iconv.iconv( 'utf-8', 'windows-1250', titulek )

parsovani_html.rb

Page 6: Úvod do programování 5

Úvod do programování Přednáška 5

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 "Nemohu se připojit na server #{server}..." exitend

titulek = html.search('div.art.opener h3 a').inner_htmlputs Iconv.iconv( 'utf-8', 'windows-1250', titulek )

www.igvita.com/blog/2007/02/04/ruby-screen-scraper-in-60-seconds/

http://code.whytheluckystiff.net/hpricot/

parsovani_html.rb

Page 7: Úvod do programování 5

Úvod do programování Přednáška 5

Když se Řehoř Samsa jednou ráno probudil z nepokojných snů, shledal, že se v posteli proměnil v jakýsi nestvůrný hmyz.

text = File.read 'kafka_promena.txt'

# ---> A ted neco trochu jineho... Najdeme nejpouzivanejsi slovo :)

words = text.tr('-,();\'"', '').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}end

nejpouzivanejsi = word_counts.sort.first # "Nejvetsi = prvni" -- ["A", {:count=>37, :word=>"A"}]

puts "Začínáme s " + nejpouzivanejsi[1][:word].to_s + "."

word_counts.sort.each do |word| nejpouzivanejsi = word if word[1][:count] > nejpouzivanejsi[1][:count] end

puts "Nejpoužívanější slovo je „" + nejpouzivanejsi[1][:word] + "“ s " + nejpouzivanejsi[1][:count].to_s + " výskyty."

nejpouzivanejsi_slovo.rb

Page 8: Úvod do programování 5

Úvod do programování Přednáška 5

Když se Řehoř Samsa jednou ráno probudil z nepokojných snů, shledal, že se v posteli proměnil v jakýsi nestvůrný hmyz.

text = File.read 'kafka_promena.txt'

# ---> ... a co seznam slov podle frekvence pouziti?

puts "Seznam nejpoužívanějších slov v Kafkově ‚Proměně‘:"

most_frequent_words = word_counts.values.collect { |word| [word[:count], word[:word]] }

most_frequent_words.sort.reverse.each_with_index do |word, i| puts "#{i+1}. #{word[1]}\t\t\t(#{word[0]} výskytů)"end

seznam_nejpouzivanejsich_slov.rb

Page 9: Úvod do programování 5

Úvod do programování Přednáška 5

Když se Řehoř Samsa jednou ráno probudil z nepokojných snů, shledal, že se v posteli proměnil v jakýsi nestvůrný hmyz.

text = File.read 'kafka_promena.txt'

# ---> A ted neco trochu jineho... Najdeme nejpouzivanejsi slovo :)

words = text.tr('-,();\'"', '').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}end

nejpouzivanejsi = word_counts.sort.first # "Nejvetsi = prvni" -- ["A", {:count=>37, :word=>"A"}]

puts "Začínáme s " + nejpouzivanejsi[1][:word].to_s + "."

word_counts.sort.each do |word| nejpouzivanejsi = word if word[1][:count] > nejpouzivanejsi[1][:count] end

puts "Nejpoužívanější slovo je „" + nejpouzivanejsi[1][:word] + "“ s " + nejpouzivanejsi[1][:count].to_s + " výskyty."

nejpouzivanejsi_slovo.rb

1

2

3

4

Page 10: Úvod do programování 5

Úvod do programování Přednáška 5

„Křehký kód“„Fragile code“

Page 11: Úvod do programování 5

Úvod do programování

Objektově orientované programování2

Page 12: Úvod do programování 5

Úvod do programování Přednáška 5

1. Nalít olej do pánve2. Zapálit plyn3. Vzít vejce4. Rozklepnout vejce o okraj pánve

Page 13: Úvod do programování 5

Úvod do programování Přednáška 5

1. Nalít olej do pánve2. Zapálit plyn3. Vzít vejce, sůl a pepř4. Rozklepnout vejce o okraj pánve

Page 14: Úvod do programování 5

Úvod do programování Přednáška 5

„Udržovatelnost“ software

Znovu-použitíRe-usability

Rozšiřitelnost

Page 15: Úvod do programování 5

Úvod do programování Přednáška 5

Košík Produkty

Objednávky

Platby

Diskuse

Page 16: Úvod do programování 5

Úvod do programování Přednáška 5

Košík Produkty

Objednávky

Platby

Diskuse

Customer.php

~500 řádků kódu

Page 17: Úvod do programování 5

Úvod do programování Přednáška 5

Košík Produkty

Objednávky

Platby

Diskuse

Customer.php

~500 řádků kódu

Page 18: Úvod do programování 5

Ú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

Page 19: Úvod do programování 5

„Formičky“

Page 20: Úvod do programování 5

Úvod do programování Přednáška 5

Zvíře

Pes Ovce

Page 21: Úvod do programování 5

Úvod do programování Přednáška 5

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 "Hello, I am a #{self.class.to_s.downcase} named #{self.name}!" 17 end 18 19 def talk 20 puts "#{self.class}: ..." 21 22 end 23

animals.rb

Page 22: Úvod do programování 5

Úvod do programování Přednáška 5

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 "[Chewing on some stuff and happy...]" 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

animals.rb

Page 23: Úvod do programování 5

Úvod do programování Přednáška 5

46 protected 47 48 def poop 49 puts "[Too much stuff in belly... pooping...]" 50 @stuff_in_belly = 0 51 end 52 53 end 54 55

animals.rb

Page 24: Úvod do programování 5

Úvod do programování Přednáška 5

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 "#{self.name}: Woof! woof!" 68 end 69 70 def fetch(what='stick') 71 puts "[#{self.name} is fetching the #{what.downcase}...]" 72 end 73 74 end 75 76

animals.rb

Page 25: Úvod do programování 5

Úvod do programování Přednáška 5

77 #-- file Sheep.rb 78 class Sheep < Animal 79 80 def talk 81 puts "#{self.name}: Beeeeee!" 82 end 83 84 end 85

animals.rb

Page 26: Úvod do programování 5

Úvod do programování Přednáška 5

86 # === Dog ===================================================================== 87 88 # --- Create a dog 89 dog = Dog.new('Bitzer', 'yellow') 90 pp dog 91 92 # --- Dog's properties (attributes) 93 puts "Our dog's name is '#{dog.name}'." 94 puts "And his color is #{dog.color}." 95

animals.rb

Page 27: Úvod do programování 5

Úvod do programování Přednáška 5

96 # --- Make the dog do something 97 puts "> Talk, Bitzer!" 98 dog.talk 99 100 puts "> Fetch, Bitzer!" 101 dog.fetch 102 dog.fetch('Ball') 103 104 puts "> Walk, Bitzer!" 105 dog.walk 106 puts "Dog is at position: #{dog.position}." 107 puts "> Run, Bitzer!" 108 dog.run 109 puts "Dog is at position: #{dog.position}." 110 111 puts "> Have a snack, Bitzer!" 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

animals.rb

Page 28: Úvod do programování 5

Úvod do programování Přednáška 5

123 puts "\n---\n\n" 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

animals.rb

Page 29: Úvod do programování 5

Úvod do programování Přednáška 5

http://ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

Page 30: Úvod do programování 5

Ú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

Page 31: Úvod do programování 5

Úvod do programování Přednáška 5

Návrhové vzoryDesign patterns

Page 32: Úvod do programování 5

Úvod do programování Přednáška 5

PŘÍKLADNávrhový vzor ActiveRecord

ID Name Surname E-mail1 John Smith [email protected] Susanna Reddick [email protected]

tabulka people

INSERT INTO people (name, surname, email) VALUES( 'John', 'Smith', '[email protected]' );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 => '[email protected]')Person.find(:all)Person.find(1)Person.find_by_name('Smith')

Page 33: Úvod do programování 5

Úvod do programování Přednáška 5

PŘÍKLADNá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 "people" ( id INTEGER PRIMARY KEY NOT NULL, name VARCHAR(255), surname VARCHAR(255), email VARCHAR(255) )')

class Person < ActiveRecord::Baseend

Person.create( :name => 'John', :surname => 'Smith', :email => '[email protected]' )Person.create( :name => 'Susanna', :surname => 'Reddick', :email => '[email protected]' )

pp Person.find(:all)puts "\n"

pp Person.find(1)puts "\n"

pp Person.find_by_surname('Smith')puts "\n"

Page 34: Úvod do programování 5

Úvod do programování Přednáška 5

MODELOVÁNÍUnified Modeling Language (UML)

Page 35: Úvod do programování 5

Děkuji!


Recommended