19. Obiektowo± 1 Kacze typowanie. 2 Klasy



Podobne dokumenty
Listy i operacje pytania

Programowanie obiektowe

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

1. Wprowadzenie do C/C++

Imi i nazwisko... Egzamin - Programowanie Obiektowe II rok informatyki, studia pierwszego stopnia, niestacjonarne Termin zerowy

1. Wprowadzenie do C/C++

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

Model obiektu w JavaScript

Baza danych - Access. 2 Budowa bazy danych

Kompozycja i dziedziczenie klas

JAO - J zyki, Automaty i Obliczenia - Wykªad 1. JAO - J zyki, Automaty i Obliczenia - Wykªad 1

Lab. 02: Algorytm Schrage

Programowanie i struktury danych

Lekcja 12 - POMOCNICY

Programowanie i projektowanie obiektowe

Podstawy Programowania Obiektowego

Rzut oka na zagadnienia zwi zane z projektowaniem list rozkazów

Wstęp do ruby dla programistów javy

Sposoby przekazywania parametrów w metodach.

Metaprogramowanie w Ruby

Programowanie i struktury danych 1 / 44

Przewodnik u»ytkownika

MiASI. Modelowanie systemów informatycznych. Piotr Fulma«ski. 18 stycznia Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

A = n. 2. Ka»dy podzbiór zbioru sko«czonego jest zbiorem sko«czonym. Dowody tych twierdze«(elementarne, lecz nieco nu» ce) pominiemy.

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Wektory w przestrzeni

Programowanie wspóªbie»ne

Programowanie obiektowe w C++ Wykªad 4

Wzorce projektowe strukturalne cz. 1

wiczenie 1 Podstawy j zyka Java. Instrukcje warunkowe

1. Warunki. 2. Zakładanie konta. 3. Logowanie. 4. Korzystanie z portalu partnera serwisowego 5. Subkonta 5.1Zakładanie subkonta. 5.

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Maszyny Turinga i problemy nierozstrzygalne. Maszyny Turinga i problemy nierozstrzygalne

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Android. Podstawy tworzenia aplikacji. Piotr Fulma«ski. March 4, 2015

Algorytmy zwiazane z gramatykami bezkontekstowymi

2 Skªadnia polece«w pliku

Programowanie Komputerów

Programowanie w Ruby

Interfejsy, klasy wewn trzne jako szczególny rodzaj obiektów

Wykład 8: klasy cz. 4

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

EPI: Interfejs Graficzny Wykład nr 2 Wbudowane typy danych Rubiego

1 Strumienie. 2 Pliki. 2.1 Zapis do pliku tekstowego. Programowanie w j zyku C - Adam Krechowicz, Daniel Kaczmarski

Funkcje wielu zmiennych

Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz

Programowanie wspóªbie»ne

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

1 Bª dy i arytmetyka zmiennopozycyjna

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

EPI: Interfejs Graficzny 2011/2012 Laboratorium nr 2 Programowanie obiektowe

Logika dla matematyków i informatyków Wykªad 1

Technologie i usługi internetowe cz. 2

Metodydowodzenia twierdzeń

Środowisko programisty

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Programowanie Obiektowe i C++

P tle. Rozdziaª Wst p. 4.2 P tle P tla for(...);

Elementy geometrii w przestrzeni R 3

WST P DO TEORII INFORMACJI I KODOWANIA. Grzegorz Szkibiel. Wiosna 2013/14

Subversion - jak dziaªa

Programowanie w Ruby

Indeksowane rodziny zbiorów

x y x y x y x + y x y

Programowanie wspóªbie»ne

Programowanie w Ruby

i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017

Projekt konceptualny z Baz Danych "Centralny system zarz dzania salami na AGH"

Rozwi zywanie Ukªadów Równa«Liniowych Ax=B metod dekompozycji LU, za pomoc JAVA RMI

Granular Computing 9999 pages 15 METODY SZTUCZNEJ INTELIGENCJI - PROJEKTY

Optymalizacja R dlaczego warto przesi ± si na Linuxa?

Funkcje wielu zmiennych

PL/SQL. Zaawansowane tematy PL/SQL

Programowanie obiektowe

Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych.

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

J zyk C dla sterowników programowalnych GeFanuc

Wykład 3 Składnia języka C# (cz. 2)

Języki i metody programowania Java. Wykład 2 (część 2)

Rachunek caªkowy funkcji wielu zmiennych

SUPLEMENT SM-BOSS WERSJA 6.15

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Edyta Juszczyk. Akademia im. Jana Dªugosza w Cz stochowie. Lekcja 1Wst p

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Bash i algorytmy. Elwira Wachowicz. 20 lutego

EPI: Interfejs Graczny 2009/2010 Podstawy Rubiego

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Specyfikacja techniczna banerów Flash

Metody numeryczne i statystyka dla in»ynierów

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

Programowanie i projektowanie obiektowe

Ukªady równa«liniowych

Funkcje, wielomiany. Informacje pomocnicze

Podstawy modelowania w j zyku UML

KLASYCZNE ZDANIA KATEGORYCZNE. ogólne - orzekaj co± o wszystkich desygnatach podmiotu szczegóªowe - orzekaj co± o niektórych desygnatach podmiotu

Programowanie Obiektowe

Podstawy Języka Java

Transkrypt:

1 Kacze typowanie 19. Obiektowo± Sk d interpreter wie, jakiego typu s np. przekazywane do metody argumenty? Tak naprawd wcale nie musi wiedzie. Do poprawnego dziaªania programu istotne jest,»e przekazywany obiekt b dzie posiadaª wymagane metody lub atrybuty. Je»eli nie b dzie miaª, dopiero wówczas zostanie zgªoszony bª d podczas próby wywoªania nieistniej cej metody. Tzw. kacze typowanie (ang. duck typing) jest to rodzaj dynamicznego typowania (ang. dynamic typing), w którym rozpoznanie typu obiektu nast puje na podstawie posiadanych przez niego metod i wªa±ciwo±ci (atrybutów): When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck. 2 Klasy W j zyku Ruby klas deniuje si za pomoc sªowa kluczowego class: 1 class MyClass 2 def initialize(arg) # metoda wywolywana podczas tworzenia obiektu 3 @attr = arg # zmienne poprzedzone @ to atrybuty 6 def my_method 7 puts "Attribute value is #{@attr}" 8 end 9 end Atrybutem jest ka»da zmienna poprzedzona znakiem @ wewn trz dowolnej metody (w zale»- no±ci od tego, jakie metody zostaªy wywoªane, obiekt danej klasy mo»e mie ró»ne atrybuty podczas swojego»ycia). Atrybuty nazywane s skªadowymi instancji lub zmiennymi instancji (ang. instance variables). Podczas tworzenia obiektu wywoªywana jest metoda initialize z odpowiedni arno±ci : 1 obj = MyClass.new(123) 2 obj.my_method Zadanie 01 Napisz klas Point3D, która b dzie reprezentowa punkt w przestrzeni trójwymiarowej. Trzy atrybuty @x, @y, @z powinny by inicjalizowane w metodzie initialize przyjmuj cej trzy argumenty. Stwórz obiekt klasy Point3D. Czy mo»na odczyta skªadowe x, y lub z? 1

2.1 Modykatory dost pu W Rubym domy±lnie wszystkie atrybuty s prywatne. Zamiast deniowa metody pomocnicze w postaci get_attr oraz set_attr(x) dost pne s makra, które tworz odpowiednie metody: attr_reader tylko do odczytu, attr_writer tylko do zapisu, attr_accessor swobodnego dost pu. 1 class MyClass 2 attr_accessor :attr # atrybut @attr bedzie mozna odczytywac 3 # i zapisywac z poziomu obiektu 4... 1 obj.attr = 123 2 puts obj.attr Ponadto, dla metod istniej standardowe modykatory zakresu dost pu (private, public, protected), które dziaªaj do ko«ca denicji klasy. Zadanie 02 Zmodykuj klas Point3D tak, aby warto±ci atrybutów mo»na byªo odczytywa i modykowa. Przetestuj odpowiednim fragmentem kodu. Zadanie 03 Do klasy Point3D dopisz publiczn metod set(x, y, z) ustawiaj c warto±ci atrybutów. Jakiego typu mog by argumenty wykorzystywane do utworzenia obiektu tej klasy? Przetestuj ró»ne typy argumentów, np. liczby, ªa«cuchy znaków, tablice. 2.2 Skªadowe klasy Zmienne wewn trz denicji klasy poprzedzone @@ s zmiennymi klasowymi (ang. class variables) mog by rozumiane jako atrybuty statyczne, tzn. obiekty tej samej klasy wspóªdziel ich warto±. 3 Metody Argumenty metod nie wymagaj podania ich typu, dlatego nie ma mo»liwo±ci przeci»ania metod. Aby zdeniowa metod o ró»nej arno±ci argumentów nale»y ustawi domy±lne warto±ci argumentów: 2

1 def foo(bar, baz="quux") 2 @bar = bar 3 @baz = baz 4 "bar = #{@bar} baz = #{@baz}" 1 foo(123, 46) # => "bar = 123 baz = 46" 2 foo(123) # => "bar = 123 baz = quux" Innym, cz sto wykorzystywanym sposobem jest u»ycie tablic asocjacyjnych: 1 def foo(bar, options={}) 2 @bar = bar 3 @baz = options[:baz] "quux" 1 foo(123, :baz => 46) # => "bar = 123 baz = 46" 2 foo(123) # => "bar = 123 baz = quux" Zadanie 04 Popraw #initialize w klasie Point3D w taki sposób, aby mo»liwe byªo utworzenie obiektu bez podawania argumentów, tylko z jednym argumentem lub tylko z dwoma. Nie podane warto±ci x, y, z powinny przyjmowa domy±ln warto± 0.0. W j zyku Ruby nazwy metod mog ko«czy si znakami! oraz?. Przyj ªo si,»e metody ko«cz ce si wykrzyknikiem to destrukcyjne (modykuj ce obiekt w miejscu) wersje metod o tej samej nazwie, ale bez wykrzyknika na ko«cu. Zadanie 0 Do klasy Point3D dodaj metod move(x,y,z), która zwróci nowy punkt przesuni ty o podane wspóªrz dne. Dopisz równie» metod move!(x,y,z), która zmodykuje obiekt, na którym metoda zostanie wywoªana. Zadanie 06 Do klasy Point3D dodaj metod zero? zwracaj c prawd, je»eli punkt le»y we wspóªrz dnych zerowych. Aliasy pozwalaj na wprowadzenie nowej nazwy dla ju» zdeniowanej metody. Pozwalaj równie» zachowa oryginaln wersj metody przed jej zredeniowaniem. 1 def foo 2 "foo!" 3 end 4 alias :bar :foo 6 foo() # => "foo!" 7 bar() # => "foo!" Zadanie 07 Do klasy Point3D dodaj metod euclidean_distance(point), która zwróci odlegªo± euklidesow mi dzy dwoma punktami. 3

Zadanie 08 W klasie Point3D zdeniuj alias dla #euclidean_distance o nazwie dist. Zadanie 09 domowe (1 pkt) Stwórz klas Path (reprezentuj c ±cie»k ), która b dzie speªniaªa poni»sze wymagania: ±cie»ka b dzie reprezentowana przez tablic punktów w atrybucie points mo»liwym do odczytu, maksymalna dªugo± ±cie»ki b dzie przechowywana w atrybucie max_length warto± do odczytu, domy±lna maksymalna dªugo± ±cie»ki b dzie przechowywana w staªej MAX_LENGTH przechowywanej wewn trz klasy, mo»liwo± tworzenia obiektu bez podawania»adnego argumentu, z jednym argumentem (maksymalna dªugo± ) lub z dwoma (maksymalna dªugo± i pocz tkowe punkty ±cie»ki), poprzez publiczn metod #add_point b dzie mo»na dodawa punkty do ±cie»ki (z ograniczeniem na maksymaln dªugo± ), prywatna metoda pairs dla tablicy o elementach i 1, i 2, i 3,..., i n zwróci tablic dwuelementowych tablic w postaci (i 1, i 2 ), (i 2, i 3 ),..., (i n 1, i n ) metoda length zwróci ª czn dªugo± ±cie»ki (wykorzystaj metod pairs). Przetestuj dziaªanie klasy i jej metod. 4 Peªna obiektowo± Poniewa» w j zyku Ruby mo»na deniowa nowe funkcje poza klas, wydawa by si mogªo,»e j zyk Ruby oferuje mo»liwo± programowania bez paradygmatu obiektowego. Nic bardziej mylnego: wszystkie te funkcje s automatycznie wykonywane w kontek±cie klasy Kernel, zatem nale» do klasy. Nawet operatory matematyczne s metodami opatrzonymi lukrem skªadniowym (patrz poni»ej), a liczby (literaªy) s obiektami klas. 4.1 Lukier skªadniowy Lukier skªadniowy (ang. syntactic sugar) to cecha skªadni j zyka, któr mo»na wyeliminowa poprzez proste przeksztaªcenia skªadniowe, wprowadzana najcz ±ciej dla wygody programisty. W j zyku C przykªadem lukru skªadniowego jest dost p do elementów tablicy poprzez zapis tab[i], który jest tªumaczony na *(tab+i). W j zyku Ruby lukrem skªadniowym s np.: 4

opcjonalno± nawiasów przy wywoªywaniu lub deniowaniu metod, operatory matematyczne, zapis 123 + 46 jest jednoznaczny z 123.+(46), metody, których nazwy ko«cz si znakiem równo±ci, dopuszczaj wstawienie znaków spacji przed tym znakiem (np. metody wygenerowane przez attr_writer), zatem obj.attr = "foo" to tak naprawd obj.attr=("foo"), odwoªanie si do elementów tablicy tab[i] to równie» wywoªanie metody tab.[](i). Rozszerzalno± klas Klasy w j zyku Ruby, nawet te wbudowane, mo»na dynamicznie modykowa, np. dodaj c nowe metody lub redeniuj c istniej ce. 1 class String 2 def palindrome? 3 self.reverse == self 6 7 "kajak".palindrome? # => true Zadanie 10 domowe (1 pkt) Rozszerz klas Numeric o mo»liwo± intuicyjnego operowania na czasie przy pomocy metod weeks, days, hours, minutes, seconds (i metod konwertuj - cych do odpowiednich jednostek czasu): 1 time = 1.days - 2.0.hours + 30.minutes 2 puts time.to_hours # => 22. 3 puts time.to_days # => 0.937