Programowanie i projektowanie obiektowe

Podobne dokumenty
Programowanie obiektowe

Programowanie i projektowanie obiektowe

Wstęp do programowania

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Programowanie obiektowe - 1.

Programowanie i projektowanie obiektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie i projektowanie obiektowe

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Programowanie obiektowe

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Języki i techniki programowania Ćwiczenia 2

Dziedziczenie. dr Jarosław Skaruz

Polimorfizm. dr Jarosław Skaruz

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie i projektowanie obiektowe

TEMAT : KLASY DZIEDZICZENIE

Dziedziczenie. Tomasz Borzyszkowski

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

PHP 5 język obiektowy

Definiowanie własnych klas

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

3.1. Obliczanie obwodu koła.

Kurs WWW. Paweł Rajba.

Laboratorium 6 DIAGRAM KLAS (Class Diagram)

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

Wykład 8: klasy cz. 4

Podstawy Programowania Obiektowego

Paweł Kurzawa, Delfina Kongo

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Technologie obiektowe

10. Programowanie obiektowe w PHP5

Programowanie obiektowe

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Programowanie i projektowanie obiektowe

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

Wykład 6: Dziedziczenie

Dziedziczenie. Zadanie 1

Programowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

problem w określonym kontekście siły istotę jego rozwiązania

Materiały do zajęć VII

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs rozszerzony języka Python

Dziedziczenie jednobazowe, poliformizm

Oracle PL/SQL. Paweł Rajba.

Mechanizm dziedziczenia

Aplikacje w środowisku Java

Programowanie Obiektowe i C++

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Zaawansowane programowanie w języku C++ Klasy w C++

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Dokumentacja do API Javy.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dziedziczenie i interfejsy

OBIEKTY PHP. G. Panuś

Programowanie Obiektowe i C++

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Język C++ Programowanie obiektowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Podstawy programowania III

Wstęp do programowania

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Podstawy Programowania semestr drugi. Wykład czternasty

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Aplikacje w środowisku Java

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Modelowanie i Programowanie Obiektowe

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Programowanie i projektowanie obiektowe

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe w języku

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

Wzorce projektowe. dr inż. Marcin Pietroo

Programowanie 2. Język C++. Wykład 3.

Wstęp do programowania

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

Programowanie obiektowe

Wstęp do programowania

Programowanie obiektowe

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Definicje klas i obiektów. Tomasz Borzyszkowski

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Transkrypt:

Programowanie i projektowanie obiektowe Obiekty i klasy w Pythonie Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 1 / 23

Klasy i obiekty Klasy w implementacji odpowiadają klasom projektowym. Obiekty są instancjami klas. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 2 / 23

Klasy i obiekty Klasy w implementacji odpowiadają klasom projektowym. Przynależność do klasy określa zakres odpowiedzialności obiektów. Obiekty są instancjami klas. Każdy obiekt należy do pewnej klasy. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 2 / 23

Klasy i obiekty Klasy w implementacji odpowiadają klasom projektowym. Przynależność do klasy określa zakres odpowiedzialności obiektów. Klasa określa funkcjonalności (metody) obiektów. Obiekty są instancjami klas. Każdy obiekt należy do pewnej klasy. Każdy obiekt odpowiada za wartości swoich atrybutów. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 2 / 23

Klasy i obiekty Klasy w implementacji odpowiadają klasom projektowym. Przynależność do klasy określa zakres odpowiedzialności obiektów. Klasa określa funkcjonalności (metody) obiektów. Obiekty są instancjami klas. Każdy obiekt należy do pewnej klasy. Każdy obiekt odpowiada za wartości swoich atrybutów. Metody określone przez klasę odwołują się do atrybutów przechowywanych w obiekcie. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 2 / 23

Klasy i obiekty Klasy w implementacji odpowiadają klasom projektowym. Przynależność do klasy określa zakres odpowiedzialności obiektów. Klasa określa funkcjonalności (metody) obiektów. Obiekty są instancjami klas. Każdy obiekt należy do pewnej klasy. Każdy obiekt odpowiada za wartości swoich atrybutów. Metody określone przez klasę odwołują się do atrybutów przechowywanych w obiekcie. Czy klasy mogą być obiektami? P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 2 / 23

Najprostszy obiekt c l a s s A : pass Klasa A nie ma żadnych metod, ale może mieć atrybuty. >>> a=a( ) >>> a. x Traceback ( most r e c e n t c a l l l a s t ) : F i l e "<s t d i n >", l i n e 1, in <module> A t t r i b u t e E r r o r : A i n s t a n c e has no a t t r i b u t e x >>> a. x=1 >>> a. x 1 >>> P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 3 / 23

Atrybuty W Pythonie atrybuty obiektów działają podobnie jak zmienne. Tworzymy je przez pierwsze przypisanie. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 4 / 23

Atrybuty W Pythonie atrybuty obiektów działają podobnie jak zmienne. Tworzymy je przez pierwsze przypisanie. Czy to oznacza, że nie można określić w definicji klasy zakresu odpowiedzialności za przechowywanie danych? P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 4 / 23

Atrybuty W Pythonie atrybuty obiektów działają podobnie jak zmienne. Tworzymy je przez pierwsze przypisanie. Czy to oznacza, że nie można określić w definicji klasy zakresu odpowiedzialności za przechowywanie danych? Dobre pytanie... P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 4 / 23

Metody Metody są definiowane w klasach. c l a s s Lew : def t a l k ( s e l f ) : p r i n t " Jestem lew " >>> l=lew ( ) >>> l. t a l k ( ) Jestem lew >>> P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 5 / 23

Metody Metody są definiowane w klasach. c l a s s Lew : def t a l k ( s e l f ) : p r i n t " Jestem lew " Definicja metody jest podobna do definicji funkcji. Pierwszy argument (self) jest obligatoryjny... P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 6 / 23

Metody Definicja metody jest podobna do definicji funkcji. Pierwszy argument (self) jest obligatoryjny...... i służy do odwoływania się do obiektu, dla którego metoda została wywołana. def sethungry ( s e l f, v a l ) : s e l f. hungry=v a l def talkmore ( s e l f ) : s e l f. t a l k ( ) i f s e l f. hungry : p r i n t " glodny lew " >>> l=lew ( ) >>> l. t a l k ( ) Jestem lew >>> l. sethungry ( True ) >>> l. talkmore ( ) Jestem lew glodny lew >>> Oczywiście do atrybutu hungry możemy również dostawać się bezpośrednio. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 7 / 23

Inicjalizacja Na początku lew jest popsuty. >>> l=lew ( ) >>> l. talkmore ( ) Jestem lew Traceback ( most r e c e n t c a l l l a s t ) : F i l e "<s t d i n >", l i n e 1, i n <module> F i l e "<s t d i n >", l i n e 9, i n talkmore A t t r i b u t e E r r o r : Lew i n s t a n c e has no a t t r i b u t e hungry Metoda init def init ( s e l f ) : s e l f. hungry=f a l s e P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 8 / 23

Dziedziczenie c l a s s GroznyLew ( Lew ) : def talkmore ( s e l f ) : s e l f. t a l k ( ) p r i n t " grozny lew, " p r i n t " s p o t k a c mnie znaczy pech. " i f s e l f. hungry : p r i n t " Wszystkich zjem, az do dna. " p r i n t " Rety, l e p i e j n i e s p o t k a c lwa. " Metoda talk jest zdefiniowana jest w klasie Lew. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 9 / 23

Dziedziczenie >>> g l=groznylew ( ) >>> g l. t a l k ( ) Jestem lew >>> g l. sethungry ( True ) >>> g l. talkmore ( ) Jestem lew grozny lew, s p o t k a c mnie znaczy pech. Wszystkich zjem, az do dna. Rety, l e p i e j n i e s p o t k a c lwa. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 10 / 23

Ograniczenia dostępu W Pythonie nie ma możliwości określania poziomu dostępności metod i atrybutów. Są dobrowolne konwencje Składowe o nazwach zaczynających się od znaku _ są uznawane za niedostępne publicznie i/lub zależne od implementacji. W szczególności nie należy zakładać, że w kolejnych wersjach programów pozostaną niezmienone. Składowe o nazwach zaczynających się od znaków śą prywatne w specyficzny sposób. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 11 / 23

Ograniczenia dostępu c l a s s Lew :... d e f talkmore ( s e l f ) : s e l f. t a l k ( ) i f s e l f. hungry : p r i n t " g l o d n y lew " d e f talkmore ( s e l f ) : s e l f. talkmore ( ) d e f t a l k S a f e ( s e l f ) : s e l f. talkmore ( ) c l a s s GroznyLew ( Lew ) : d e f talkmore ( s e l f ) : s e l f. t a l k ( ) p r i n t " grozny lew, " p r i n t " s p o t k a c mnie zn i f s e l f. hungry : p r i n t " Wszystkich p r i n t " Rety, l e p i e d e f talkmore ( s e l f ) : s e l f. talkmore ( ) d e f talkmean ( s e l f ) : s e l f. talkmore ( ) P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 12 / 23

Ograniczenia dostępu >>> l=lew ( ) >>> l. talkmore ( ) Jestem le w g l o d n y lew >>> l. t a l k S a f e ( ) Jestem le w g l o d n y lew P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 13 / 23

Ograniczenia dostępu >>> g l=groznylew ( ) >>> g l. talkmore ( ) Jestem le w grozny lew, s p o t k a c mnie znaczy pech. Wszystkich zjem, az do dna. Rety, l e p i e j n i e s p o t k a c lwa. >>> g l. t a l k S a f e ( ) Jestem le w g l o d n y lew >>> g l. talkmean ( ) Jestem le w grozny lew, s p o t k a c mnie znaczy pech. Wszystkich zjem, az do dna. Rety, l e p i e j n i e s p o t k a c lwa. >>> P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 14 / 23

Duck typing 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. Na zmienną można przypisać referencję do dowolnego obiektu. Próba odwołania się do nieistniejącej składowej skutkuje błędem wykonania. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 15 / 23

Duck typing c.d. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 16 / 23

Duck typing c.d. Zalety Można używać w jednym kontekście obiektów nie mających wspólnej nadklasy zawierającej wymagane składowe. Nie trzeba stosować rzutowań, interfejsów, typów generycznych ani wzorców. Łatwiejsze projektowanie. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 16 / 23

Duck typing c.d. Zalety Wady Można używać w jednym kontekście obiektów nie mających wspólnej nadklasy zawierającej wymagane składowe. Nie trzeba stosować rzutowań, interfejsów, typów generycznych ani wzorców. Łatwiejsze projektowanie. Proste błędy (np. literówki), mogłyby zostać wykryte na etapie kompilacji. Ścisły system typów zabezpiecza przed podawaniem niewłaściwych argumentów itp. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 16 / 23

Python quirks metoda init Metoda init nie jest konstruktorem. Jeżeli podczas inicjalizacji podklasy ma zostać wywołana metoda init z nadklasy, trzeba to zrobić wprost. B a s e C l a s s. init ( s e l f, [ a r g s... ] ) P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 17 / 23

Python quirks metody to funkcje >>> l=lew ( ) >>> l. talkmore ( ) Jestem lew >>> Lew. talkmore ( l ) Jestem lew >>> Lew. sethungry ( l, True ) >>> Lew. talkmore ( l ) Jestem lew glodny lew >>> P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 18 / 23

Python quirks argumenty metod/funkcji Domyślne wartości d ef init ( s e l f, hungry=true ) :... P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 19 / 23

Argumenty nazwane d ef p a r r o t ( v o l t a g e, s t a t e= a s t i f f, a c t i o n= voom, t y p e= Norwegian Blue ) : p r i n t " This p a r r o t wouldn t ", a c t i o n, p r i n t " i f you put ", v o l t a g e, " v o l t s through i t. " p r i n t " L o v e l y plumage, the ", t y p e p r i n t " I t s ", s t a t e, "! " p a r r o t (1000) # 1 p o s i t i o n a l argument p a r r o t ( v o l t a g e =1000) # 1 keyword argument p a r r o t ( v o l t a g e =1000000, a c t i o n= VOOOOOM ) # 2 keyword a r g s p a r r o t ( a c t i o n= VOOOOOM, v o l t a g e =1000000) # 2 keyword a r g s p a r r o t ( a m i l l i o n, b e r e f t o f l i f e, jump ) # 3 p o s i t i o n a l arguments p a r r o t ( a thousand, s t a t e= p u s h i n g up the d a i s i e s ) # 1 p o s i t i o n a l, 1 keyword P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 20 / 23

Zadanie 1 Kostka Zadanie Zaimplementuj klasę Kostka z gry w Monopol. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 21 / 23

Zadanie 2 Zwierzaki Zadanie Puść wodze fantazji, zaprojektuj i zaimplementuj hierarchię klas opisującą zwierzęta domowe. Zaimplementuj funkcje opisujące opiekę nad nimi. Zademonstruj mechanizm duck typing. Sprawdź, jak kończy się próba wydojenia kury. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 22 / 23

Zadanie 3 Figury geometryczne Zadanie Utwórz hierarchię klas służącą do przechowywania informacji o figurach geometrycznych (kwadrat, prostokąt, koło, trójkąt) pozwalającą na wykonywanie następujących operacji (tam gdzie to możliwe): obliczanie obwodu i pola, obliczanie długości najdłuższego boku, obliczanie promienia okręgu opisanego na figurze, wypisywanie informacji. P. Daniluk (Wydział Fizyki) PO w. III Jesień 2013 23 / 23