EPI: Interfejs Graczny 2009/2010 Programowanie obiektowe w Rubim

Līdzīgi dokumenti
Red button

Autentifikācija Windows darbstacijās ar eid viedkarti Konfigurācijas rokasgrāmata Konfigurācija atbilst Windows Server 2012 R2 un Windows Server 2008

KURSA KODS

Viss labs Daces Copeland teksts Andras Otto ilustrācijas Lietus līst. Lietus līst lielām, lēnām lāsēm. Labi, lai līst! Lietus ir labs. A1:12

Apstiprināts ar rīkojumu Nr /35 A/S Transporta un sakaru institūts (turpmāk tekstā - TSI) NOLIKUMS par doktorantu/zinātniskā grāda p

KURSA KODS

State Revenue Services of the Republic Latvia Talejas iela 1, Riga LV-1978 Latvia Ihr Vor- und Zuname Ihre Straße und Hausnummer Ihre Postleitzahl Ihr

Mēbeļu piedāvājums / Office furniture offer

S-7-1, , 7. versija Lappuse 1 no 5 KURSA KODS VadZPB10 STUDIJU KURSA PROGRAMMAS STRUKTŪRA Kursa nosaukums latviski Inovāciju vadība un ekoi

Microsoft Word - Smalltalk.doc

Rīgas Tehniskā universitāte Apstiprinu: Studiju prorektors Uldis Sukovskis Rīga, Programmēšanas valoda JavaScript - Rīga Neformālās izglītī

21.gadsimta prasmju un iemaņu attīstība Zane Matesoviča, British Council pārstāvniecības Latvijā vadītāja

A/S Transporta un sakaru institūts (turpmāk tekstā - TSI) NOLIKUMS par ārvalstu akadēmiskā personāla atlasi 2018./2019., /2020. akadēmiskajam ga

IANSEO - Integrated Result System - Version ( ( )) - Release STABLE

Slide 1

PowerPoint Presentation

Datorzinātņu doktorantūras zinātniskais seminārs Atrašanās vietas inteliģences metodes datu noliktavu mobilai lietotnei 1.k.doktorante: Daiga Plase Da

Ievadlekcija.

7. Tēma: Polinomi ar veseliem koeficientiem Uzdevums 7.1 (IMO1982.4): Prove that if n is a positive integer such that the equation x 3 3xy 2 + y 3 = n

Renault Master furgona versiju cenu lapa

2.2/20 IEGULDĪJUMS TAVĀ NĀKOTNĒ! Eiropas Reģionālās attīstības fonds Prioritāte: 2.1. Zinātne un inovācijas Pasākums: Zinātne, pētniecība un at

INFORMĀCIJAS TEHNOLOĢIJU IZMANTOŠANA BĒRNA PSIHOFIZIOLOĢISKĀ STĀVOKĻA NOVĒRTĒŠANĀ UN UZVEDĪBAS KOREKCIJĀ THE USE OFINFORMATION TECHNOLOGIES IN THE ASS

A9R1q9nsan_v63m4l_2ow.tmp

B_Briede

Microsoft PowerPoint - DS.AM.01.ppt

Microsoft Word - Papildmaterials.doc

190321_ _FEMI_Levigatrci indd

Grozījumi PUBLISKO IEPIRKUMU LIKUMĀ

Eiropas Savienības Padome Briselē, gada 3. novembrī (OR. en) 15041/14 PAVADVĒSTULE Sūtītājs: ENT 251 MI 843 CONSOM 227 COMPET 600 DELACT 213 Dir

WA 3D Dobele Nolikums 1. Mērķis un uzdevumi Noskaidrot WA 3D Dobele gada uzvarētājus atbilstošās loka klasēs, uzlabot personīgos rezultātus un r

series_155

Kārtības 2. pielikums "Latvijas Bankas elektroniskās klīringa sistēmas (EKS) funkcionālais apraksts"

Akciju sabiedrības PROTEZĒŠANAS UN ORTOPĒDIJAS CENTRS K A T A L O G S iepirkuma 3. daļai Atklātam konkursam Par tiesībām pielāgot un izsniegt gatavos

3D_modeli_atskaite.pages

Instrukcija par semināru Seminārs ir e-studiju aktivitāšu modulis, kas ir līdzīgs uzdevuma modulim, kurā studenti var iesniegt savus darbus. Tikai sem

Fonds Svītrkods Autors, nosaukums Plaukta indekss Vidzemes augstskolas bibliotēka Vidzemes augstskolas bibliotēka Valmieras bibliotēka

Microsoft Word - MR002_Radosu_uznem_vadis LAT.doc

Kas mums izdodas un ko darīsim tālāk?

PowerPoint Presentation

Oracle SQL teikuma izpildes plāns (execution plan)

Mounting_Instruction_Owl_Class_II_High_Bay_

DVB-T2 Tuner lv Lietošanas instrukcijas

protokols_19_01_17_rezultati_ml

Hyundai i20 Modelis i20 i20 i20 Komplektācija 1.2 MPI ISG COMFORT 5MT 75 ZS 1.2 MPI ISG COMFORT 5MT 75 ZS 1.0 T-GDI COMFORT 7DCT 100 ZS Papildu Aprīko

Deeper Smart Sonar START Technical Specifications Weight: 2.1oz / 60g Size: 60 x 65 x 65-mm / 2.3 x 2.5 x 2.5in Sonar Type: Single beam Frequency (Bea

University of Latvia Faculty of Physics and Mathematics Department of Mathematics Dissertation Fuzzy matrices and generalized aggregation operators: t

Packet Core Network 2018

PowerPoint Presentation

3 drawer bedside / D FR Montageanleitung Instructions d' assemblage GB I Assembly instructions Instruzioni

Chest with 3 drawers / D FR Montageanleitung Instructions d' assemblage GB I Assembly instructions Instruzi

Microsoft Word - KK_NOR'19.docx

Inovatīvi risinājumi viedai pilsētai Juris Golunovs, Rīgas enerģētikas aģentūras Energoefektivitātes informācijas centra vadītājs VARAM seminārs par L

Kia Niro HEV MY20 Cenu lapa KIA Niro HEV MY20 ĀTRĀS SAITES Piedziņa Dzinējs Pārnesumu kārba Komplektācija Cena 4x2 1.6 GDI 6DCT Automātiskā LX

Ldz vpn INSTRUKCIJA WINDOWS LIETOTĀJIEM.

Apstiprināts Latvijas farmaceitu biedrības valdes gada 30. maija sēdē, prot. Nr. 17 Ar grozījumiem līdz LFB valdes sēdei gada 18. oktobrī,

Microsoft Word - Mobilais_telefons_NG4

Transkripts:

EPI: Interfejs Graczny 2009/2010 Programowanie obiektowe w Rubim 20 pa¹dziernika 2010

OO Object Orientedness Obiektowe zorientowanie Object oriented is a catchy phrase. To call anything object oriented can make you sound pretty smart. Matz, Ruby User's Guide j zyki proceduralne Fortran, C, Pascal program = kolekcja struktur danych i procedur j zyki zorientowane obiektowo Smalltalk, Java, Ruby program = kolekcja obiektów

Motywacja pó¹ne lata 60-te: kryzys oprogramowania sprz t staje si coraz mocniejszy mo»na zajmowa si coraz bardziej skomplikowanymi problemami programy staj si wi ksze kod staje si niezrozumiaªy Edsger Dijkstra 1972: "To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem."

Przykªad proceduralny licznik kilometrów Zbudujmy model samochodowego licznika kilometrów urz dzenia, które ±ledzi dystans jaki przebyª samochód od momentu, w którym licznik byª ostatnio resetowany prosta implementacja w C: float distance; //trzyma aktualnie zarejestrowany dystans void increment_distance(float d){ distance+=d; } void reset(){ distance=0; } void bogus_procedure(){ distance-=100;//zdecydowanie niezamierzone! } Problem: ka»dy mo»e manipulowa stanem licznika!

Zupeªnie inne spojrzenie na programowanie Wysokopoziomowe spojrzenie na modelowan domen : zamiast my±le w kategoriach sekwencji procedur zidentykuj 'graczy', elementy, które s modelowane obiekty! Spójrz na rzeczywiste obiekty! Przykªad: domena: Alicja w Krainie Czarów obiekty: Alicja, Biaªy Królik, Królowa, Kot z Cheshire, Kryjówka Królika

Podej±cie obiektowe jakie wªasno±ci posiadaj? atrybuty jakie dziaªania podejmuj? metody Obiekt Alicja: atrybuty: wzrost, poªo»enie metody: powi ksz, pomniejsz, powiedz_wiersz Obiekt Kot z Cheshire: atrybuty: widoczno±, lokalizacja metody: zniknij, pojaw_si, u±miechnij_si

Klasy i obiekty Je±li wiemy jak zbudowa jeden obiekt mo»emy budowa ich wiele, stosuj ten sam wzorzec. Ten wzorzec nazywany jest klas. klasa deniuje abstrakcyjn charakterystyk rzeczy np. klasa Osoba: posiada imi i nazwisko, potra si przedstawi obiekt jest instancj klasy, posiada stan np. konkretna osoba, której imieniem jest "Jan", a nazwiskiem "Kowalski"

Przekazywanie wiadomo±ci Obiekty komunikuj si przekazuj c wiadomo±ci wywoªuj nawzajem swoje metody. Metafora czarnej skrzynki: Pozostaªe obiekty nie powinny by zainteresowane tym co znajduje si wewn trz czarnej skrzynki musz jedynie zna komunikaty, które mog by do niej przesªane w celu wysªania/odebrania danych!

Klasy i obiekty w Rubim class Person def initialize(first_name, last_name) @first_name = first_name @last_name = last_name def to_s "#{@first_name} #{@last_name}" def introduce "My name is #{self.to_s}" john = Person.new("John","Smith") puts john.introduce

Klasy i obiekty w Rubim new tworzy nowy obiekt danej klasy initialize wywoªywana, kiedy tworzony jest nowy obiekt (tzn. jako pochodna wywoªania new) self referencja do aktualnego obiektu; zazwyczaj mo»e by pomini ta @ znak oznaczaj cy zmienn instancyjn atrybut obiektu

Przykªad obiektowy licznik kilometrów class Odometer def initialize @distance = 0.0 def increment_distance(distance) @distance += distance if distance > 0 def reset @distance = 0.0 o = Odometer.new o.increment_distance(10.0) o.distance -= 100 #=> NoMethodError: undefined method `distance' for #=> #<Odometer:0xb7cd3378 @distance=0.0>

Zasi g zmiennych $my_var zmienna globalny dost pna w ka»dym kontek±cie @@my_var zmienna klasowa dost pna w klasie i wszystkich jej obiektach @my_var zmienna instancyjna dost pna tylko w obiekcie, do którego nale»y my_var zmienna lokalna zasi g leksykalny

Zasi g zmiennych class Greeter @@hello_counter = 0 def initialize(name) @name = name def say_hello @@hello_counter += 1 puts "Hello #{@@hello_counter} "+@name+'!' g1 = Greeter.new('Joe') g1.say_hello #=> Hello 1 Joe! g2 = Greeter.new('Mary') g2.say_hello #=> Hello 2 Mary!

Obiekt/klasa atrybuty/metody Atrybuty Metody Deniowanie metod klasowych Obiekt Klasa @attr np. @name nazwa konkretnego obiektu Denicja: def introduce Wywoªanie: obiekt.metoda np. john.introduce @@attr np. @@count liczba obiektów danej klasy Denicja: def Person.new Wywoªanie: klasa.metoda np. Person.new Tablica: Atrybuty i metody

Odbiorca Odbiorca jest elementem, który odpowiada na wywoªanie metody jest tym co stoi na lewo od kropki kropka np. person {}}{. introduce }{{}}{{} odbiorca metoda W przypadku metod instancyjnych odbiorc jest instancja W przypadku metod klasowych odbiorc jest klasa Je±li odbiorca jest pomini ty domy±lnie jest: aktualnym obiektem lub self w przypadku metod instancyjnych aktualn klas w przypadku metod klasowych

Dost p do atrybutów Atrybuty obiektu s domy±lnie prywatne ale mo»na je udost pni poprzez zdeniowane akcesorów tzw. getterów i setterów. Mo»na to zrobi r cznie: class Colour def initialize(rgb) @rgb = rgb def rgb @rgb def rgb=(new_rgb) @rgb = new_rgb

Dynamiczne akcesory Lub zwi ¹lej: class Colour attr_accessor :rgb def initialize(rgb) @rgb = rgb Obie denicje pozwol na wykonywanie nast puj cych operacji: c = Colour.new('#000000') c.rgb c.rgb = '#FFFFFF' W celu uczynienia atrybutu tylko odczytywalny/zapisywalny, u»ywamy odpowiednio attr_reader i attr_writer.

Dost pno± metod W Rubim wyst puj trzy poziomy dost pno±ci metod: public (publiczny) metody tego rodzaju mog by wywoªywane bez ogranicze«; domy±lnie wszystkie metody s publiczne, z wyj tkiem initialize, która jest zawsze prywatna protected (chroniony) metody mog by wywoªywane tylko przez obiekty danej klasy i jej podklas private (prywatny) metody nie mog by wywoªywane z jawnym odbiorc ; innymi sªowy mog by wywoªywane wyª cznie w obr bie danego obiektu Modykatory dost pu s umieszczane w nowej linii i dotycz wszystkich metod, które po nich nast puj, a» do napotkania kolejnego modykatora (o ile wyst puje).

Modykatory dost pu class MyClass def method1 #... protected def method2 #... private def method3 #... public def method4 #... # domy±lnie dost.,,publiczny'' # kolejne metody b d,,chronione'' # jest,,chronina'' # kolejne metody b d,,prywatne'' # jest,,prywatna'' # kolejne metody b d,,publiczne'' # jest,,publiczna''

Dziedziczenie Poj cia, która s odpowiednikami klas w OOP, zazwyczaj tworz hierarchi typu: poj cie bardziej ogólne poj cie bardziej specyczne. Przykªad: kot jest rodzajem ssaka. W Rubim zapisujemy to nast puj co: class Mammal class Cat < Mammal W j zykach obiektowych mówimy,»e: Ssak jest nadklas kota Kot jest podklas ssaka Podklasa dziedziczy wªasno±ci (atrybuty i metody) nadklasy.

Dziedziczenie przykªad class Mammal def breathe puts 'wdycham i wydycham' class Cat < Mammal def speak puts 'Miau!' tama = Cat.new tama.breathe #=> wdycham i wydycham tama.speak #=> Miau!

Modykowanie zachowania Co zrobi w wypadku, gdy podklasa nie powinna dziedziczy wszystkich metod swojej nadklasy? class Bird def lay_egg puts 'Skªadam jajko!' def fly puts "Latam!" class Penguin < Bird def fly fail "Przykro mi, ja tylko pªywam!"

Redeniowanie metod nadklasy Podklasa mo»e caªkowicie zmodykowa metod nadklasy: class Person def identify puts "Jestem osob!" class Student < Person def identify puts "Jestem studentem!" lub j rozszerzy : class Student < Person def identify super puts "Jestem studentem!"

Wielodziedziczenie W naturze wielodziedziczenie jest caªkowicie naturalne: muª jest rodzajem osªa jak i konia Wi kszo± j zyków programowania pozwala jedynie na dziedziczenie jednobazowe Ruby rówie». Niemniej jednak, klasy Rubiego mog dziedziczy metody od wielu rodziców poprzez dziedziczenie mieszane (dziedziczenie implementacji), do którego wykorzystywane s moduªy.

Moduªy Moduªy s jak klasy, ale: nie mog posiada instancji nie mog posiada podklas (podmoduªów) s deniowane za pomoc sªów kluczowych module... Moduª mo»e by doª czony do klasy poprzez wmiksowanie (wmieszanie) jego metod.

Przykªad mixinu (wmiksowania) class Player attr_accessor :name, :surname, :rank include Comparable def initialize(name,surname,rank) @name = name @surname = surname @rank = rank def <=>(other) self.rank <=> other.rank p1 = Player.new("Andrea", "Agassi", 100) p2 = Player.new("Roger","Federer",1) p2 < p1 #=> true

Materiaªy ¹ródªowe Object Oriented thinking w Ruby User's Guide (http://www.rubyist.net/ slagell/ruby/oothinking.html) Rozdziaª 3 Programowanie w j zyku ruby (http://www.rubycentral.com/pickaxe/tut_classes.html) Rozdziaª Obiektowo± w Ruby intro (http://apohllo.pl/dydaktyka/ruby/intro/klasy/)