Programowanie obiektowe

Podobne dokumenty
Programowanie i projektowanie obiektowe

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

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

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe

PHP 5 język obiektowy

Kurs rozszerzony języka Python

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Programowanie i projektowanie obiektowe

Programowanie obiektowe - 1.

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

Programowanie i projektowanie obiektowe

Paweł Kurzawa, Delfina Kongo


Programowanie Obiektowe i C++

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?

Programowanie obiektowe

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Programowanie obiektowe

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1 Atrybuty i metody klasowe

Programowanie obiektowe

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

Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)

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

Wzorce projektowe. dr inż. Marcin Pietroo

Metaprogramowanie w Ruby

10. Programowanie obiektowe w PHP5

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

Wykład 8: klasy cz. 4

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

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

.NET Klasy, obiekty. ciąg dalszy

Podstawy Programowania Obiektowego

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

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

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

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

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

Zaawansowane programowanie w C++ (PCP)

OBIEKTY PHP. G. Panuś

Diagramy klas. dr Jarosław Skaruz

Kurs WWW. Paweł Rajba.

Programowanie obiektowe

Podstawy Programowania Programowanie Obiektowe

Definiowanie własnych klas

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

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

Aplikacje w środowisku Java

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Programowanie i projektowanie obiektowe

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie obiektowe

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Wzorce projektowe. dr inż. Marcin Pietroo

Oracle PL/SQL. Paweł Rajba.

Programowanie Obiektowe i C++

Wprowadzenie do programowania aplikacji mobilnych

Programowanie obiektowe

Programowanie i projektowanie obiektowe

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Mechanizm dziedziczenia

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

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie Obiektowe i C++

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

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

Programowanie Zespołowe

Dokumentacja do API Javy.

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

Programowanie obiektowe

Język C++ Programowanie obiektowe


Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Programowanie obiektowe

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Szablony klas, zastosowanie szablonów w programach

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Wykład 6: Dziedziczenie

Common Lisp - funkcje i zmienne

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

Technologia Programowania 2016/2017 Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4

Dziedziczenie. Tomasz Borzyszkowski

Dziedziczenie. dr Jarosław Skaruz

Transkrypt:

Programowanie obiektowe Metody statyczne i klasowe Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 1 / 23

W poprzednich odcinkach... Klasy kategorie obiektów Przynależność do klasy określa zakres odpowiedzialności obiektów. Klasa określa funkcjonalności (metody) obiektów. Obiekty instancje 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. Metody mogą być dziedziczone. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 2 / 23

W poprzednich odcinkach... Klasy kategorie obiektów Przynależność do klasy określa zakres odpowiedzialności obiektów. Klasa określa funkcjonalności (metody) obiektów. Obiekty instancje 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. Metody mogą być dziedziczone. Czy klasy mogą być obiektami? P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 2 / 23

Klasy są obiektami (w Pythonie) Klasy mogą mieć atrybuty >>> class A:... pass... >>> >>> A.class_attr="classA" >>> >>> a.class_attr classa Atrybuty klas są dziedziczone >>> class B(A): pass... >>> B.class_attr class A >>> P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 3 / 23

Przestrzenie nazw Odwołanie do składowej o b i e k t. a t r y b u t o b i e k t. metoda ( ) Klasa. a t r y b u t Kolejność przeszukiwania 1 Obiekt 2 Klasa obiektu 3 Nadklasa 4 Kolejne nadklasy... Przeszukiwanie odbywa się do skutku. Atrybuty obiektu przysłaniają atrybuty klas. Atrybuty podklasy przysłaniają atrybuty nadklasy. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 4 / 23

Przykład A a t t r 1=" c l a s s A" a t t r 2=" c l a s s A" B a t t r 2=" c l a s s B" obj1 a t t r 1=" o b j 1" obj2 a t t r 2=" o b j 2" P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 5 / 23

Przykład >>> class A: pass... >>> class B(A): pass... >>> A.attr="class A" >>> A.attr class A >>> B.attr class A >>> B.attr="class B" >>> A.attr class A >>> B.attr class B P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 6 / 23 Uwaga Przypisanie zawsze tworzy atrybut w najbliższym zasięgu przeszukiwania.

Słownik dict Atrybuty własne obiektu (klasy) znajdują się w słowniku dict. Przykład >>> B. dict module : main, doc : None, attr : class B >>> class C(B): pass... >>> C. dict module : main, doc : None P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 7 / 23

Zastosowania atrybutów klasowych Wartości charakteryzujące podklasy Wartości wspólne dla wszystkich instancji (stałe i parametry konfiguracyjne) Zmienne globalne Wartości charakteryzujące podklasy Czasami stosując wzorzec Template method wystarczy w podklasie użyć atrybutu. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 8 / 23

Zastosowania atrybutów klasowych c.d. Przykład c l a s s Z w i e r z e : d e f d a j _ g l o s ( s e l f ) : p r i n t s e l f. g l o s c l a s s P i e s ( Z w i e r z e ) : g l o s="woof, woof " c l a s s Swinka ( Z w i e r z e ) : g l o s="oink, o i n k " c l a s s LewHoward ( Z w i e r z e ) : g l o s=" Roark " d e f d a j _ g l o s ( s e l f ) : Ziemia. t r z e s _ s i e ( ) Z w i e r z e. d a j _ g l o s ( s e l f ) P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 9 / 23

Zastosowania atrybutów klasowych c.d. Wartości wspólne dla wszystkich instancji (stałe i parametry konfiguracyjne) Nigdy nie umieszcza się w kodzie stałych, ani parametrów jako wartości, ponieważ ich zmiana wiązałaby się z koniecznością odnalezienia wszystkich wystąpień. Ze względów projektowych dobrze jest umieszczać stałe i parametry jak najbliżej metod, które z nich korzystają. Zmienne globalne Przykłady: licznik utworzonych instancji ostatnio obliczona wartość kontener na instancje połączenie z bazą danych P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 10 / 23

Metody w klasach Pytanie (przewrotne) Skoro funkcje w Pythonie są wartościami, a klasy mogą mieć atrybuty, to czemu nie tworzyć atrybutów klas, które są funkcjami? Odpowiedź Bo nie trzeba. Są metody statyczne. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 11 / 23

Metody statyczne Metoda statyczna różni się od zwykłej brakiem argumentu self. W związku z tym może być wywoływana dla klasy. Definicję metody statycznej poprzedza się dekoratorem @staticmethod. Przykład c l a s s A : a t t r=" c l a s s A" @staticmethod def m( ) : p r i n t A. a t t r W metodach statycznych do atrybutów klasy można się odwoływać przez jej nazwę. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 12 / 23

Singleton Singleton to wzorzec projektowy, który polega na ograniczeniu liczby instancji obiektu danej klasy to jednej i zapewnieniu łatwego dostępu do jedynej instancji. Stosuje się go, jeżeli z różnych powodów wiele instancji wzajemnie by sobie przeszkadzało. Przykłady fabryki obiektów stan aplikacji wszelkie sytuacje, gdy zmienne globalne są naprawdę konieczne i mają skomplikowaną strukturę Czasami zamiast prawdziwego singletona wystarczy klasa z atrybutami i metodami statycznymi. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 13 / 23

Singleton przykład c l a s s S i n g l e t o n : _instance=none @staticmethod def g e t _ i n s t a n c e ( ) : i f S i n g l e t o n. _instance==none : S i n g l e t o n. _instance=s i n g l e t o n ( ) return S i n g l e t o n. _instance P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 14 / 23

Singleton przykład c l a s s S i n g l e t o n : _instance=none @staticmethod def g e t _ i n s t a n c e ( ) : i f S i n g l e t o n. _instance==none : S i n g l e t o n. _instance=s i n g l e t o n ( ) return S i n g l e t o n. _instance W Pythonie takie rozwiązanie nie gwarantuje, że kolejne instancje nie zostaną stworzone bezpośrednio. Można wprowadzić zabezpieczenie w metodzie init. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 14 / 23

Singletonów należy używać wyłącznie, gdy jest to naprawdę konieczne da się udowodnić, że nie można inaczej. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 14 / 23 Singleton przykład c l a s s S i n g l e t o n : _instance=none @staticmethod def g e t _ i n s t a n c e ( ) : i f S i n g l e t o n. _instance==none : S i n g l e t o n. _instance=s i n g l e t o n ( ) return S i n g l e t o n. _instance W Pythonie takie rozwiązanie nie gwarantuje, że kolejne instancje nie zostaną stworzone bezpośrednio. Można wprowadzić zabezpieczenie w metodzie init.

Metody statyczne ostrzeżenia Metody statyczne w zasadzie nie różnią się niczym od funkcji zdefiniowanych poza klasą, ale pozwalają na lepszą organizację kodu. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 15 / 23

Metody statyczne ostrzeżenia Metody statyczne w zasadzie nie różnią się niczym od funkcji zdefiniowanych poza klasą, ale pozwalają na lepszą organizację kodu. Java W Javie używanie metod statycznych jest koniecznością, bo nie można definiować funkcji. W Pythonie jest sens ich używać wyłącznie, gdy poprawia to czytelność kodu... P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 15 / 23

Metody statyczne ostrzeżenia Metody statyczne w zasadzie nie różnią się niczym od funkcji zdefiniowanych poza klasą, ale pozwalają na lepszą organizację kodu. Java W Javie używanie metod statycznych jest koniecznością, bo nie można definiować funkcji. W Pythonie jest sens ich używać wyłącznie, gdy poprawia to czytelność kodu...... albo chcemy wywoływać metody statyczne również dla instancji obiektu. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 15 / 23

Metody statyczne ostrzeżenia Metody statyczne w zasadzie nie różnią się niczym od funkcji zdefiniowanych poza klasą, ale pozwalają na lepszą organizację kodu. Java W Javie używanie metod statycznych jest koniecznością, bo nie można definiować funkcji. W Pythonie jest sens ich używać wyłącznie, gdy poprawia to czytelność kodu...... albo chcemy wywoływać metody statyczne również dla instancji obiektu. Dziedziczenie Metody statyczne powodują kłopoty przy dziedziczeniu, jeżeli atrybuty, do których się odnoszą są przysłonięte w podklasie. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 15 / 23

Metody statyczne dziedziczenie >>> class A:... attr="class A"...... @staticmethod... def print_attr():... print A.attr... >>> A.print_attr() class A >>> >>> class B(A):... attr="class B"... >>> B.print_attr() class A >>> P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 16 / 23

Gdyby była możliwość przekazania klasy jako argumentu metody, można byłoby odwoływać się do jej atrybutów. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 17 / 23

Metody klasowe Metoda klasowa ma argument cls działający analogicznie do self. Definicję metody statycznej poprzedza się dekoratorem @classmethod. Przykład c l a s s A : a t t r=" c l a s s A" @classmethod def m( c l s ) : p r i n t c l s. a t t r P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 18 / 23

Metody klasowe dziedziczenie >>> class A:... attr="class A"...... @classmethod... def print_attr(cls):... print cls.attr... >>> A.print_attr() class A >>> >>> class B(A):... attr="class B"... >>> B.print_attr() class B >>> P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 19 / 23

Factory methods jeszcze raz Metody klasowe znakomicie nadają się do tworzenia factory methods. Przykład c l a s s A b s t r a c t : @classmethod def c r e a t e ( c l s ) : c l s. count+=1 return c l s ( ) c l a s s A( A b s t r a c t ) : count=0 def init ( s e l f ) : p r i n t " i n i t A" c l a s s B(A ) : count=0 P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 20 / 23

Factory methods jeszcze raz c.d. Test >>> A.create() init A <A instance at 0x10a5c0cf8> >>> A.create() init A <A instance at 0x10a5c0d88> >>> B.create() init A <B instance at 0x10a5c0cf8> >>> A.count 2 >>> B.count 1 P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 21 / 23

Zadanie 1 Numerowanie instancji Zadanie Zaimplementuj abstrakcyjną klasę umożliwiającą tworzenie instancji podklas zawierających atrybut order, który służy do numerowania kolejnych instancji podklas (każdej niezależnie). P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 22 / 23

Zadanie 2 Multiton Multiton jest klasą, która może mieć ściśle określoną liczbę instancji. Wszystkie instancje powinny być dostępne poprzez podanie klucza. Zaimplementuj hierarchę multitonów, które mogą się różnić się zbiorami kluczy. P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 23 / 23