Wykład 2 Programowanie zorientowane obiektowo w Pythonie

Wielkość: px
Rozpocząć pokaz od strony:

Download "Wykład 2 Programowanie zorientowane obiektowo w Pythonie"

Transkrypt

1 Wykład 2 Programowanie zorientowane obiektowo w Pythonie Plan wykładu: 1. Podstawowe informacje 2. Funkcje specjalne 3. Przeciążanie funkcji i operatorów 4. Dokumentowanie klasy 5. Wbudowane atrybuty obiektu i klasy 6. Konstruktor i destruktor 7. Atrybuty obiektu, atrybuty prywatne, statyczne 8. Łańcuchowa reprezentacja obiektu 9. Funkcje określające prawdziwość obiektu 10. Metody porównania obiektów 11. Metody statyczne 12. Dziedziczenie 13. Dziedziczenie wielopokoleniowe 14. Wyjątki 15. Implementacja kolekcji 1

2 Z ro dła Strona Marcina Młotkowskiego: James O. Knowlton, Python. Projekty do wykorzystania, Helion Chris Fehily, Po prostu Python, Helion 2

3 Podstawowe informacje Każda klasa dziedziczy po object. Poniżej zdefiniowano pustą klasę class Person(object): pass Definicja klasy kończy się w miejscu, gdzie kończymy wcięcie. Każda metoda klasy jako pierwszy parametr przyjmuje obiekt, w którym jest zdefiniowana (self): class Person(object): def wyswietl_napis(self): print 'Napis' Podczas wywołania metody obiektu nie wymieniamy na liście argumentów self. Jest on automatycznie przekazywany przez Pythona do metody. 3

4 Funkcje specjalne Nazwy metod specjalnych zawsze rozpoczynają się i kończą dwoma znakami podkreślenia (na przykład init (). Python uruchamia te metody automatycznie, gdy interpreter napotka funkcję wbudowaną lub operator odpowiadający danej metodzie specjalnej. Python używa metod specjalnych w następujących przypadkach: tworzenie i usuwanie egzemplarza; tworzenie reprezentacji łańcuchowych egzemplarza; definiowanie wartości prawdziwości egzemplarza; porównywanie egzemplarzy; dostęp do atrybutów egzemplarza; traktowanie egzemplarzy jak sekwencji i słowników; wykonywanie operacji matematycznych na egzemplarzach. Uwaga: Nie można używać metod specjalnych do zmiany zachowania wbudowanych typów. 4

5 Przeciąz anie funkcji i operatoro w Przeciążanie funkcji polega na tym, że funkcja o takiej samej nazwie zachowuje się różnie w zależności od typów lub klas podanych argumentów. Python wybiera odpowiednie działanie automatycznie na podstawie parametrów funkcji, co znaczy, że na przykład wywołuje metodę specjalną str (x) po wywołaniu str(x), jeśli x jest egzemplarzem klasy dysponującej metodą str (). Przeciążanie operatora polega na przypisaniu więcej niż jednej funkcji do danego operatora (+,, *,**,t; itp.). Wykonywana operacja zależy od typów lub klas podanych operandów. Np. operator+ wykonuje dodawanie, jeśli jego operandami są liczby, albo łączenie, jeśli operandami są łańcuchy. Metoda specjalna na przykład add () umożliwia określenie sposobu wykonania działania x + y wtedy, gdy x i y są egzemplarzami klasy. 5

6 Dokumentowanie klasy Na początku definicji klasy możemy umieścić wiersz dokumentacyjny class Point """ A location on the 2D plane """ pass Point. doc A location on the 2D plane Jeżeli nie zostanie podany łańcuch dokumentacyjny to wartością atrybutu doc jest None. Łańcuchy dokumentacyjne można dodawać do metod klasy w taki sam sposób jak do funkcji 6

7 Atrybuty klasy Wbudowane atrybuty klasy i obiektu klasy dict słownik zawierający przestrzeń nazw danej klasy doc name łańcuch dokumentacyjny klasy nazwa klasy module nazwa modułu w którym została zdefiniowana klasa base krotka (może być pusta) zawierająca klasy nadrzędne w kolejności ich występowania na liście klas nadrzędnych Atrybuty obiektu: dict class słownik zawierający przestrzeń nazw obiektu klasa obiektu 7

8 Konstruktor i destruktor class Person(object): counter = 0 def init (self): # konstruktor print 'Jestem konstruktorem' def del (self): # destruktor print 'Jestem destruktorem' p = Person() # Jestem konstruktorem del p # Jestem destruktorem 8

9 Usuwanie egzemplarza Liczba odwołań do obiektu zwiększa się, gdy zostaje on przypisany do nowej nazwy lub umieszczony w kontenerze (liście, kratce lub słowniku). Liczba odwołań do obiektu zmniejsza się, gdy jest on usuwany za pomocą del, gdy odwołanie do niego jest zastępowane innym lub gdy wychodzi poza zakres. Jeśli liczba odwołań do obiektu osiąga zero, Python uruchamia odśmiecanie. >>> a = 39 # Tworzy obiekt <39> >>> b = a # Zwiększa liczbę odwołań do <39> >>>c = [b] #Zwiększa liczbę odwołań do <39> >>> >>> del a #Zmniejsza liczbę odwołań do <39> >>>b = -99 #Zmniejsza liczbę odwołań do <39> >>> c[0] = -1 # Zmniejsza liczbę odwołań do <39> 9

10 Uwaga dotycząca destruktora Jest on wywoływany wtedy, gdy dany egzemplarz ma być usunięty. Metoda ta może być wykorzystana do oczyszczenia wszelkich zasobów pamięci używanych przez egzemplarz. Metoda del () jest rzadko stosowana w praktyce, ponieważ nie ma gwarancji, że będzie wywołana w określonym odstępie czasu (może się zdarzyć, że nie zostanie wywołana nigdy). Nie warto więc polegać na destruktorze przy operacjach zwalniania zasobów (na przykład przy zamykaniu pliku). Lepsze wyniki można uzyskać definiując jakąś jawnie wywoływaną metodę close(), która wykona także operacje oczyszczające. Instrukcja del nie wywołuje metody _del_() bezpośrednio, lecz zmniejsza o jeden liczbę odwołań do obiektu. Destruktor wywoływany jest tylko wtedy, gdy ta liczba stanie się równa zeru. Zliczanie odwołań nie udaje się dla cyklicznych struktur danych, czyli obiektów odwołujących się nawzajem do siebie. Jeśli na przykład x i y odwołują się do siebie nawzajem, to liczba odwołań nigdy nie stanie się równa zeru, więc nigdy nie nastąpi odśmiecanie (dotyczy to także każdego obiektu, do którego odwołują się obiekty x lub y). Python uruchamia okresowo procedurę wykrywania i usuwania cykli. Proces odśmiecania Pythona nie będzie usuwał cyklicznych egzemplarzy, dla których zdefiniowano metodę del (). Jest to następny powód przemawiający za tym, by nie definiować del ( ). 10

11 Atrybuty obiektu (instancji) Zmienne instancji definiujemy w konstruktorze: class Person(object): def init (self): self.firstname = 'Jan' self.lastname = 'Kowalski' Możemy również definiować atrybuty po utworzeniu obiektu: Adam = Person(); Adam.wiek = 25; # Tworzymy nowy atrybut i przypisujemy wartość 25 11

12 Atrybuty prywatne Nazwy elementów prywatnych zaczynamy od class Person(object): private_field = 'top secret' Python zgłasza wyjątek AttributeError przy próbie dostępu z zewnątrz klasy do nazwy prywatnej. 12

13 Przekręcona nazwa atrybutu prywatnego Python ukrywa nazwę prywatną zmieniając jej nazwę wewnętrzną na _classname attrname. Taki mechanizm zabezpieczania nazywany przekręcaniem nazw jest w istocie iluzją, bowiem można uzyskać dostęp do prywatnego atrybutu posługując się jego przekręconą nazwą. >>> class Point: origin = (0, 0) def change_origin (self, x, y): self. origin = (x,y) print "New origin:", self. origin >>> pt = Point() >>> pt.change_origin(-1,1) New origin : (-1, 1) >>> pt. origin Traceback (most recent call last): File "<stdin> ", line 1, in? AttributeError: Point instance has no attribute origin >>> pt._point origin (-1, 1) 13

14 Tworzą łańcuchową reprezentację obiektu. class Point: def init (self, x=0, y=0): self.x = x self.y = y def str _ (self): return "(%g,%g)" % (self.x. self.y) def _repr_(self): return "Point(%s.%s)" % (self.x. self.y) Funkcje str () i repr () >>> from point import Point >>> pt = Point(3,9) >>> str(pt) '(3,9)' >>> print pt (3,9) >>> repr(pt) Point(3,9) >>> 'pt' 'Point(3.9)' Nieformalna reprezentacja łańcuchowa egzemplarza jest zwracana przez str() i print(); jego formalna reprezentacja jest zwracana przez repr() i. Formalna reprezentacja łańcuchowa może być użyta do tworzenia kopii egzemplarza. 14

15 Okres lanie prawdziwos ci obiektu Domyślnie przyjęto, że prawdziwość egzemplarza jest prawdą, lecz za pomocą metody specjalnej nonzero () można nadać jej wartość i zwracać 0 (fałsz) albo 1 (prawda). class Point: def init (self, x=0, y=0): self.x = x self.y = y def str (self): return "(%g, %g)" % (self.x, self.y) def nonzero (self): if self.x ==0 and self.y ==0: return 0 else: return 1 >>> from point import Point >>> pt1 = Point(0,1) >>> pt2 = Point(0,0) >>> pt3 = Point(1,5) >>>for pt in [pt1, pt2, pt3]: if pt: print pt, "is true" else: print pt, "is false" (0. 1) is true (0, 0) is false (1, 5) is true >>> print pt1 and pt2 (0,0) >>> print pt2 or pt3 (0, 5) >>> not pt2 1 15

16 Metody poro wnania obiekto w Do porównywania egzemplarzy za pomocą wbudowanych operatorów porównania(<,<=,>, >=i!=) można zastosować metody specjalne, które zostały wymienione poniżej. Metody te są nazywane metodami pełnego porównywania. Metoda Wynik lt (self.other) le (self,other) gt (self.other) ge (self,other) eq (self,other) ne (self.other) self < other self <= other self > other self >= other self == other self!= other 16

17 def comp (self, other): block Jak definiowac metody poro wnania Wielkość comp () jest jedną z metod porównania, które są przedstawione na poprzedniej stronie. Python wywołuje te metody wtedy, gdy egzemplarz zostanie użyty w wyrażeniu porównującym. Wielkość self dotyczy egzemplarza, dla którego wywoływana jest metoda comp (), zaś other jest egzemplarzem, z którym dany egzemplarz jest porównywany. Metoda porównania może zwracać dowolną wartość, lecz jeśli operator porównania zostanie użyty w kontekście logicznym, wartość ta powinna być interpretowanajako wartość logiczna (1 jako prawda, O jako fałsz); w przeciwnym wypadku Python wywołuje wyjątek TypeError. 17

18 from math import hypot class Point: def init (self, x=0, y=0): self.x = x self.y = y Przykład zastosowania metod poro wnania def _lt_(self, other): return hypot(self.x. self.y)< hypot(other.x, other.y) def _le_(self, other): return hypot(self.x. self.y) <=hypot(other. X, other.y) def _gt_(self, other): return hypot(self.x, self.y) >hypot(other.x, other.y) def _ge_(self, other): return hypot(self.x. self.y) >=hypot(other.x, other.y) 18

19 def _eq_(self, other): return hypot (self.x, self.y)==hypot(other.x. other y) def _ne_(self. other): return hypot(self.x, self.y)!= hypot(other.x, other.y) >>> from point import Point >>> pt1 = Point(0,0) #Odległość = 0 >>> pt2 = Point(2,2) #Odległość = 2.83 >>> pt3 = Point(3.4) # Odległość = 5 >>> pt4 = Point(-3,4) #Odległość = 5 >>> ptl > pt2 0 >>> pt2 <= pt3 == pt4 1 19

20 Pozycyjne poro wnanie dwo ch list class Mylist: def init (self, lst): self.lst = lst def _eq_(self, other): result = [] for i in range(len(self.lst)): If self.lst[i] == other.lst[i]: result.append(1) else: result.append(0) return result >>> from mylist import Mylist >>> lst1 = Mylist([1, 2, 3, 4, 5]) >>> lst2 = Mylist([1, 9, 3, 4, 9]) >>> lst1 == lst2 [1, 0, 1, 1, 0] 20

21 Atrybuty statyczne Definiujemy zaraz po linijce rozpoczynającej definicję klasy: class Person(object): counter = 0 def init (self): Person.counter += 1 def del (self): Person.counter -= 1 p1 = Person() p2 = Person() p1.counter # 2 del p1 p2.counter # 1 21

22 Metody statyczne Metody statyczne definiujemy poprzedzając je oraz nie podając parametru self class def wypisz_napis(): print 'Napis' Person.wypisz_napis() # Napis 22

23 Metody prywatne Nazwy metod prywatnych rozpoczynamy od dwóch podkreślników class Person(object): def top_secret_method(): print 'Secret information' p = Person() p. top_secret_method() #' top_secret_method' # Attribute Error: 'Person' object has no attribute 23

24 Dziedziczenie class Shape: origin = (0.0) shape_name = None def init (self, x=0, y=0): self x = x self y = y def str (self): return "%s, x=%g, y=%g" % (self.shape_name, self.x, self.y) def move(self, delta_x, delta_y): self.x +=delta_x self.y += delta_y class Circle(Shape): shape_name = "circle" def init (self, x=0, y=o, radius=1): Shape init (self. x. y) self.radius = radius def str (self): return Shape. str (self) + (",radius=%g" % (self.radius)) def area(self): return self.radius * self.radius *

25 class Square(Shape): shape_name = "square" def init (self, x=0, y=0, side=1): Shape init (self, x, y) self.side = side def str_ (self): return Shape. str (self) + (",side=%g" % (self.side)) def area(self): return self.side* self.side >>> from shape import Shape. Circle, Square >>> circle = Circle(0,0,2) >>> square = Square(0,0,3) >>> print circle Circle, x=0, y=0, radius=2 >>> print square Square, x=0, y=0, side=3 >>> print circle.origin, square.origin (0, 0) (0, 0) >>> circle.area() >>> square.area() 9 >>> circle.move( -1,- 2) >>> print circle Circle, x=-1, y=-2, radius=2 >>> square. move(2,3) >>> print square Square, x=2,y=3, side=3 25

26 Wielodziedziczenie class Samochod: def naprzod(self): class Okret: def naprzod(self): class Amfibia(Lodz,Samochod): problem: amf = Amfibia() amf.naprzod() # która funkcja zostanie wywołana z klasy Samochod czy Okret? 26

27 Rozwiązywanie konfliktu przy dziedziczeniu wielokrotnym Przeszukiwanie w głąb od lewej do prawej 27

28 Dostęp do przodka Dostęp do przodka uzyskujemy poprzez metodę super() class ABC(object): def A(self): print 'A from ABC' class A(ABC): def A(self): super(a, self).a() a = A() a.a() # 'A from ABC' 28

29 Uwagi do dziedziczenia Jeśli klasa podrzędna definiuje atrybut o takiej samej nazwie, jaką ma atrybut jej klasy nadrzędnej, to egzemplarze klasy podrzędnej korzystają z jej atrybutów, chyba że atrybut jest jawnie kwalifikowany za pomocą nazwy klasy nadrzędnej (z operatorem kropki). Wewnątrz egzemplarza klasy podrzędnej Python szuka nazw atrybutów w następującej kolejności: przestrzeń nazw egzemplarza jest ona dostępna poprzez argument self i zawiera zmienne egzemplarza, zmienne prywatne egzemplarza oraz zmienne egzemplarza klasy nadrzędnej; przestrzeń nazw klasy zawiera ona metody, zmienne klasy, metody prywatne i prywatne zmienne klasy; przestrzeń nazw klasy nadrzędnej zawiera ona metody klasy nadrzędnej, zmienne klasy nadrzędnej, metody prywatne klasy nadrzędnej i prywatne zmienne klasy nadrzędnej. Jeśli klasa znajduje się w innym module niż jej klasa nadrzędna, to można kwalifikować nazwę tej klasy nadrzędnej za pomocą nazwy modułu: class subclass(module.superclass) 29

30 Property class Klasa(object): def init (self): self. x = None def getx(self): return self. x klasa = Klasa() klasa.x = 12 print klasa.x del klasa.x # klasa.setx(12) # print klasa.getx() # klasa.delx() def setx(self, value): self._x = value def delx(self): del self. x x = property(getx, setx, delx, 'Zmienna x'); 30

31 Property dla atrybutu tylko do odczytu Definicja property voltage dla atrybutu tylko do odczytu _voltage class Parrot(object): def init (self): self._voltage = def voltage(self): """Get the current voltage.""" return self._voltage 31

32 Property inny sposo b definicji class C(object): def init (self): self._x = def x(self): """I'm the 'x' property.""" return def x(self, value): self._x = def x(self): del self._x 32

33 Wyjątki Nawet jeżeli wyrażenie Pythona jest składniowo poprawne, może to spowodować błąd podczas próby wykonania. Błędy wykryte podczas wykonywania nazywane są wyjątkami i nie są bezwarunkowo krytyczne. Na kolejnych slajdach zaprezentuję jak obsługiwać wyjątki w programach Pythona. Większość wyjątków nie jest obsługiwanych przez programy i zwracają komunikaty o błędach: >>> 10 * (1/0) Traceback (most recent call last): File "<stdin>", line 1, in? ZeroDivisionError: integer division or modulo by zero >>> 4 + spam*3 Traceback (most recent call last): File "<stdin>", line 1, in? NameError: name 'spam' is not defined >>> '2' + 2 Traceback (most recent call last): File "<stdin>", line 1, in? TypeError: cannot concatenate 'str' and 'int' objects Wyjątki mają różne typy, podawane w komunikacie błędu: ZeroDivisionError, NameError, TypeError. Innymi słowy jest to nazwa wyjątku wbudowanego (identyfikator). 33

34 Built-in Exceptions lista wbudowanych wyjątków i ich znaczenie. Wyłapywanie wyjątko w try except try statement 1 statement 2 except (id1, id2, id3, ): action 1 action 2 Instrukcja try działa w następujący sposób. Po pierwsze, wykonywane są wyrażenia pomiędzy try a except. Jeśli nie wystąpią wyjątki, klauzula except jest pomijana i wykonanie instrukcji try jest zakończone. Jeśli wystąpi wyjątek podczas wykonywania klauzuli try, reszta statement jest pomijana. Następnie, jeśli jego typ pasuje do wyjątku po słowie kluczowym except, to akcje są wykonywane, a następnie wykonanie przemieszczane jest poza try. Jeśli pojawi się wyjątek, który nie pasuje do wyjątków wymienionych po except, to wyjątek jest przekazywany do zewnętrznych try, jeśli nie znaleziono obsługi wyjątku, to jest to nieobsługiwany wyjątek i wykonanie programu jest zatrzymuje się z komunikatem unhandled exception. 34

35 try except przykład Wyjątek wywołujemy używając except try: open('/etc/shadow') except IOError, (errno, strerror): print u'wystąpił błąd numer ' + str(errno) + ': ' + strerror Wystąpił błąd Wystąpił błąd numer 13: Permission denied 35

36 try except nowy przykład >>> while True:... try:... x = int(raw_input("please enter a number: "))... break... except ValueError:... print "Oops! That was no valid number. Try again..." 36

37 try except else Gdy nie wystąpi wyjątek else try: open('/etc/shadow') except IOError, (errno, strerror): print u'wystąpił błąd numer ' + str(errno) + ': ' + strerror else: print u'plik /etc/shadow otwarty pomyślnie' Wystąpił błąd Wystąpił błąd numer 13: Permission denied Nie było błędu Plik /etc/shadow otwarty pomyślnie 37

38 try except else finally try: open('/etc/shadow') except IOError, (errno, strerror): print u'wystąpił błąd numer ' + str(errno) + ': ' + strerror else: print u'plik /etc/shadow otwarty pomyślnie' finally: print u'ja wykonam się zawsze' Wystąpił błąd Wystąpił błąd numer 13: Permission denied Ja wykonam się zawsze Nie było błędu Plik /etc/shadow otwarty pomyślnie Ja wykonam się zawsze 38

39 39

40 Kilka wyjątko w jednoczes nie try: open('/etc/shadow') print dict['klucz'] except IOError: print u'błąd otwarcia pliku' except KeyError: print u'błąd dostępu do słownika' else: print u'nie wystąpiły błędy' try: open('/etc/shadow') print dict['klucz'] except (IOError, KeyError): print u'wystąpił błąd' else: print u'nie wystąpiły błędy' 40

41 Kolejny przykład Łapane są również wyjątki nie występujące bezpośrednio w sekcji try ale również te które powstaną w funkcjach wywołanych w sekcji try: >>> def this_fails():... x = 1/0... >>> try:... this_fails()... except ZeroDivisionError as detail:... print 'Handling run-time error:', detail... W przykładzie wykorzystano argument wyjątku detail aby wypisać dodatkowe informacje 41

42 Tworzenie własnego wyjątku Trzeba zdefiniować klasę pochodną od Exception class MojWyjatek(Exception): pass 42

43 Tworzenie własnego wyjątku przykład >>> class MyError(Exception): W tym przykładzie przeciążono konstruktor z... def init (self, value): klasy Exception. Nowy konstruktor tworzy... self.value = value... def str (self): atrybut value eliminując standardowe zachowanie polegające na tworzeniu atrybutu args.... return repr(self.value)... >>> try:... raise MyError(2*2)... except MyError as e:... print 'My exception occurred, value:', e.value... My exception occurred, value: 4 >>> raise MyError('oops!') Traceback (most recent call last): File "<stdin>", line 1, in? main.myerror: 'oops!' 43

44 Obsługa wyjątko w w nowym module class Error(Exception): """Base class for exceptions in this module.""" pass class InputError(Error): """Exception raised for errors in the input. Klasy wyjątków mogą wykonywać dowolne akcje, które mogą wykonywać inne klasy. Zwykle jednak klasy te posiadają proste metody oferując informacje o błędzie. Attributes: expr -- input expression in which the error occurred msg -- explanation of the error """ def init (self, expr, msg): self.expr = expr self.msg = msg class TransitionError(Error): """Raised when an operation attempts a state transition that's not Kiedy tworzymy moduł, w którym może powstać kilka różnych błędów zwykle tworzy się klasę podstawową dla wszystkich wyjątków zdefiniowanych w tym module i klasy pochodne dla każdego nowego typu błędu, który może pojawić się w kodzie modułu. 44

45 allowed. Attributes: prev -- state at beginning of transition next -- attempted new state msg -- explanation of why the specific transition is not allowed """ def init (self, prev, next, msg): self.prev = prev self.next = next self.msg = msg 45

46 Introspekcje Informacje o obiekcie dir(obiekt) Dokumentacja obiektu, metody, funkcji help(obiekt) Sprawdzenie czy posiada atrybut hasattr(obiekt, 'nazwa_atrybutu') Pobranie atrybutu getattr(obiekt, 'nazwa_atrybutu') Sprawdzenie czy obiekt jest typu isinstance(obiekt, typ) 46

47 Introspekcje Sprawdzenie czy obiekt dziedziczy po issubclass(obiekt, podtyp) Sprawdzenie czy obiekt jest wykonywalny callable(obiekt) Lista słów kluczowych keywords Lista obiektów wbudowanych dir( builtins ) Dostęp do docstringów obiekt. doc 47

48 Introspekcje Nazwa obiektu obiekt. name Pobieranie typu obiektu type(obiekt) Sprawdzanie identyczności obiektów obiekt1 is obiekt2 Dostęp do atrybutów obiektu obiekt. dict Lista przodków klasy: klasa. bases 48

49 Introspekcje funkcji def fun(a, b=1, c=2, d=3): pass Nazwa funkcji fun.func_name # fun Dokumentacja funkcji fun.func_doc # '' Domyślne wartości funkcji fun.func_defaults # (1,2,3) Obiekt kodu funkcji fun.func_code # <code object fun at 0x98e8f08, file "<ipython console>", line 1> 49

50 Liczba przyjmowanych argumentów fun.func_code.co_argcount # 4 Liczba zmiennych łącznie z argumentami fun.func_code.co_nlocals # 4 Nazwa pliku w którym znajduje się funkcja Introspekcje funkcji fun.func_code.co_filename # '<ipython console>' Nazwy argumentów i zmiennych lokalnych fun.func_code.co_varnames # ('a', 'b', 'c', 'd') Dane o funkcji 50

51 fun.func_code.co_flags 0x04 czy użyto *args 0x08 czy użyto **kwargs 51

52 Sposób korzystania z kolekcji: for element in kolekcja: print x Implementacja kolekcji Szczegóły wykonania: Na początku wywoływana jest metoda iter. Wartością powinien być obiekt (enumerator) implementujący metodę next() która za każdym wywołaniem zwraca kolejny element kolekcji. Metoda next() jest wywoływana tak długo, póki nie zostanie zgłoszony wyjątek StopIteration 52

53 Implementacja kolekcji zwracającej kolejne liczby od 1 do 10 class ListaLiczb: def iter (self): self.licznik = 0 return self def next(self): if self.licznik >= 10: raise StopIteration self.licznik += 1 return self.licznik 53

54 Implementacja klasy wektorów Vector: operatory arytmetyczne v1 = Vector([1, 0, 0]) v1 = Vector([0, 1, 0]) v3 = v1 + v2 str(vector([0, 0 1])): <0, 0, 1> len(vector([0, 0 1])): 3 Kolejny przykład (Zadanie) 54

55 Implementacja wektora class Vector: def init (self, lista): self.value = lista def add (self, arg): if self. class <> arg. class or len(self.value) <> len(arg.value): return None res = Vector( [x + y for x, y in zip(self.value, arg.value) ]) return res Wykorzystanie: v1 = Vector([1, 0, 3]) v2 = Vector([0, 2, 0]) print v1 + v2 55

56 Konwersja na tekst >>> print Vector([1,2,3]) < main.vector instance at 0xb7eabdec> def str (self): return < +,.join([str(x) for x in self.value]) + > >>> print Vector([1,2,3]) <1, 2, 3> 56

57 Włas ciwos ci kolekcji Pożądane cechy kolekcji Indeksowany dostęp do danych k[4] Obsługa poprzez iteratory for in rozmiar kolekcji len Dostęp indeksowany: def getitem (self, index): return self.value[index] def setitem (self, index, value): self.value[index] = value Zastosowanie: >>> print v1[k] >>> v1[k] = k 57

58 def delitem (self, index): del self.value[index] Usuwanie elemento w za pomocą del Długość kolekcji def len (self): return len(self.value) Implementacja kolekcji strona 55. (Przypomnienie) 58

59 def iter (self): self.indeks = 0 return self Implementacja kolekcji Vector bez generatora def next(self): if self.indeks >= len(self): raise StopIteration self.indeks += 1 return self.value[self.indeks - 1] 59

60 Włas ciwos ci generatora mechanizm leniwej ewaluacji; przypomina działaniem return, ale zwraca iterator, nie wskazywaną wartość; pozwala zwrócić wartość zachowując stan obliczeń w metodzie/funkcji. Zwrócenie iteratora: instrukcja yield def iter (self): return self.nastepniki() def nastepniki(self): i = 0 while i < len(self): yield self[i] i = i

61 Reimplementacja metody add Poprzednia wersja def add (self, arg): if self. class <> arg. class or len(self.value) <> len(arg.value): return None res = Vector( [x + y for x, y in zip(self.value, arg.value) ]) return res Nowa wersja def add (self, arg): if self. class <> arg. class or len(self) <> len(arg): return None return Vector( [x + y for x, y in zip(self, arg) ]) 61

62 Definicja klasy Vector Podsumowanie Można używać operatora + ( add ); indeksowany dostęp do współrzędnych ( getitem, setitem ) iteracje po współrzędnych; len() i str(); ukrycie implementacji. 62

63 Inny przykład yeld Implementacja nieskończonej listy potęg: def power2(): power = 1 while True: yield power power = power * 2 it = power2() for x in range(4): print it.next() Nieskończona pętla for i in power2(): print i 63

64 Dynamiczne wykonanie programu exec "print 2 + 2" exec open("foo.py") print eval(2*2) 64

65 Dynamiczna kompilacja kodu Wbudowana funkcja compile(źródło, typ źródła, typ kodu) zwraca obiekt reprezentujący skompilowany kod. x = 10 code = compile(print x\nprint 2*x, <string>, exec) exec code 65

66 Problem z kontekstem wywołania x = 10 code = compile(print x\nprint 2*x, <string>, exec) wykonaj(code) def wykonaj(kod): exec kod 66

67 Przekazanie kontekstu wywołania x = 10 code = compile(print x\nprint 2*x, <string>, exec) wykonaj(code) def wykonaj(code): loc = { x : 5} exec code in loc 67

Kurs rozszerzony języka Python

Kurs rozszerzony języka Python Wykład 2. 13 października 2017 Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4 Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4 Deklaracja klasy Klasy i obiekty Przykłady class Figura: Pierwsza

Bardziej szczegółowo

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python Wykład 4. 23 października 2015 Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie Protokół iteracyjny Producent Umiem dostarczać

Bardziej szczegółowo

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie Wizualizacja danych Ćwiczenie 5 Python 3: Programowanie obiektowe i dziedziczenie Dziedziczenie Mając klasę bazową możemy utworzyć klasę pochodną, która będzie dziedziczyć po klasie bazowej czyli będzie

Bardziej szczegółowo

Pisząc kod w Pythonie na pewno już nie raz coś poszło nie tak i Shell wypisał komunikat o błędzie podobny do poniższego:

Pisząc kod w Pythonie na pewno już nie raz coś poszło nie tak i Shell wypisał komunikat o błędzie podobny do poniższego: Wyjątki Pisząc kod w Pythonie na pewno już nie raz coś poszło nie tak i Shell wypisał komunikat o błędzie podobny do poniższego: >>> 1/ File "", line 1, in 1/ ZeroDivisionError: integer

Bardziej szczegółowo

Wyjątki. try - except

Wyjątki. try - except Wyjątki Wyjątek jest obiektem Pythona reprezentującym błąd. Innymi słowy, jest on zdarzeniem, które pojawia się podczas wykonania programu przerywając jego normalny przebieg. Wyobraźmy sobie dłuższy fragment

Bardziej szczegółowo

Język Python (3) Język Python (3) 1/35

Język Python (3) Język Python (3) 1/35 Język Python (3) Język Python (3) 1/35 Język Python (3) 2/35 Kod samotestujący Tworzenie def t e s t e r ( ) : p r i n t ( "Wywołanie funkcji testujacych..." ) i f n ame == main : t e s t e r ( ) Język

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wyjątki, metody specjalne, generatory Paweł Daniluk Wydział Fizyki Jesień 2015 P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 1 / 23 Wyjątki It s easier to ask forgiveness than

Bardziej szczegółowo

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python Wykład 1. 4 października 2013 Plan wykładu 1 2 3 4 Typy proste Kolekcje Instrukcje w języku (przypomnienie) Wykładowca: Termin wykładu: piątek, 10:15 12:00, sala 119 Strona wykładu http://www.ii.uni.wroc.pl/

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Język programowania Ruby Marcin Młotkowski 12 kwietnia 2018 Plan wykładu 1 Wstęp 2 Typy numeryczne Łańcuchy znaków (klasa String) Przedziały Tablice i tablice asocjacyjne Nazwy

Bardziej szczegółowo

Kurs rozszerzony języka Python

Kurs rozszerzony języka Python Wykład 1. 6 października 2017 Plan wykładu 1 2 3 4 Plan wykładu 1 2 3 4 Wykładowca: Termin wykładu: piątek, 10:15 12:00, sala 119 Strona wykładu http://www.ii.uni.wroc.pl/ marcinm/dyd/python Materiały

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

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

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4 Spis treści 1 Dekoratory 1.1 Zadanie 1 1.2 Zadanie 2 1.3 Zadanie 3 1.4 Zadanie 4 Dekoratory Dekoratory w Pythonie służą do zastępowania zdefiniowanych przez nas funkcji przez funkcje (lub inne obiekty)

Bardziej szczegółowo

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python Wykład 2. 11 października 2013 Plan wykładu 1 Klasy i obiekty 2 3 4 Deklaracja klasy Przykłady class Figura: Pierwsza klasa def init (self, x, y): self.x = x self.y = y Definicja metody class Figura, cd.

Bardziej szczegółowo

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Podstawy programowania w Pythonie

Podstawy programowania w Pythonie Podstawy programowania w Pythonie Wykład 6 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie 21 listopada 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania

Bardziej szczegółowo

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

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop. 2017 Spis treści Przedmowa 11 1. Jak w programie 21 Czym jest program? 21 Uruchamianie interpretera języka Python 22 Pierwszy

Bardziej szczegółowo

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe Programowanie i projektowanie obiektowe Metaprogramowanie (w Pythonie) Paweł Daniluk Wydział Fizyki Jesień 2016 P. Daniluk(Wydział Fizyki) PO w. XI Jesień 2016 1 / 32 Wstęp ideologiczny Języki programowania

Bardziej szczegółowo

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

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7 Spis treści 1 Funkcje 1.1 Zadanie 1 1.2 Zadanie 2 1.3 Zadanie 3 1.4 Zadanie 4 1.5 Zadanie 5 1.6 Zadanie 6 1.7 Zadanie 7 Funkcje Przy programowaniu często zdarza się, że pewne czynności chcemy wykonywać

Bardziej szczegółowo

Język Python. Język Python 1/35

Język Python. Język Python 1/35 Język Python Język Python 1/35 Język Python 2/35 Wstęp Uruchamianie interpretera python Skrypty wykonywalne #!/usr/bin/python #!/usr/bin/env python lub #!/usr/bin/python3 #!/usr/bin/env python3 chmod +x

Bardziej szczegółowo

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości

Bardziej szczegółowo

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ]

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ] JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA Marcin Lewandowski [ mlew@ippt.gov.pl ] PROGRAMOWANIE FUNKCYJNE I OBIEKTOWE W PYTHONIE 2 PROGRAMOWANIE FUNKCYJNE 3 Źródła Programowanie funkcyjne (wykład MIMUW)

Bardziej szczegółowo

Środowisko programisty

Środowisko programisty Środowisko programisty 1/35 Środowisko programisty Język Python cz. 3 dr inż. Grzegorz Michalski 7 kwietnia 2014 Środowisko programisty 2/35 Kod samotestujący Tworzenie def t e s t e r ( ) : p r i n t

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Język Python (2) Język Python (2) 1/36

Język Python (2) Język Python (2) 1/36 Język Python (2) Język Python (2) 1/36 Język Python (2) 2/36 Podstawy funkcji Pojęcia podstawowe Instrukcja def tworzy obiekt funkcji i przypisuje go do nazwy Instrukcja return przekazuje obiekt wynikowy

Bardziej szczegółowo

Python. Wprowadzenie. Jolanta Bachan

Python. Wprowadzenie. Jolanta Bachan Python Wprowadzenie Jolanta Bachan Zainstaluj i przetestuj Pythona https://www.python.org/downloads/ print 'Hello world!' operatory numeryczne: + - * / // % ** operatory porównania: ==!= > < >=

Bardziej szczegółowo

Delphi Laboratorium 3

Delphi Laboratorium 3 Delphi Laboratorium 3 1. Procedury i funkcje Funkcja jest to wydzielony blok kodu, który wykonuje określoną czynność i zwraca wynik. Procedura jest to wydzielony blok kodu, który wykonuje określoną czynność,

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

Typy danych, cd. Łańcuchy znaków

Typy danych, cd. Łańcuchy znaków Typy danych, cd. Łańcuchy znaków Typ danych string, jest rozumiany jako łańcuch znaków - liter, cyfr i symboli. Stringi definiuje się w podwójnych lub pojedyńczych cudzysłowach. typ_ kawy = " latte " typ_herbaty

Bardziej szczegółowo

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA Python wprowadzenie Warszawa, 24 marca 2017 Python to język: nowoczesny łatwy w użyciu silny można pisać aplikacje Obiektowy klejący może być zintegrowany z innymi językami np. C, C++, Java działający

Bardziej szczegółowo

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

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji). Dekoratory są w miarę ezoteryczną cechą Pythona w przeciwieństwie do funkcji, klas czy iteratorów nie są powszechną cechą języków programowania. Niemniej, warto je omówić mimo wszystko, gdyż są niezwykle

Bardziej szczegółowo

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

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

Bardziej szczegółowo

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe 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

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Wykład 12 Wstęp do programowania obiektowego Janusz Szwabiński Plan wykładu: Pierwsze kroki Programowanie obiektowe W stronę zastosowań praktycznych klasa Particle Więcej o metodach

Bardziej szczegółowo

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH Michał Bujacz bujaczm@p.lodz.pl B9 Lodex 207 godziny przyjęć: środy i czwartki 10:00-11:00 http://www.eletel.p.lodz.pl/bujacz/ 1 Pytania weryfikacyjne:

Bardziej szczegółowo

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem. Podstawy programowania Wykład PASCAL Zmienne wskaźnikowe i dynamiczne 1 dr Artur Bartoszewski - Podstawy prograowania, sem. 1- WYKŁAD Rodzaje zmiennych Zmienne dzielą się na statyczne i dynamiczne. Zmienna

Bardziej szczegółowo

Programowanie Obiektowe Ćwiczenie 4

Programowanie Obiektowe Ćwiczenie 4 Programowanie Obiektowe Ćwiczenie 4 1. Zakres ćwiczenia wyjątki kompozycja 2. Zagadnienia Założeniem, od którego nie należy odbiegać, jest by każdy napotkany problem (np. zatrzymanie wykonywanej metody)

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python Wykład 6. 6 listopada 2015 Plan wykładu Callable objects 1 Callable objects 2 3 Plan wykładu Callable objects 1 Callable objects 2 3 Callable objects Wszystko jest obiektem. Callable objects Wszystko jest

Bardziej szczegółowo

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

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe 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ść

Bardziej szczegółowo

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) MAS dr. Inż. Mariusz Trzaska Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) Zagadnienia o Podstawy o Kontrolowanie sterowania o Klasy o Interfejsy o Obsługa błędów o Pojemniki o System

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych Algorytmy i struktury danych 3. Elementy programu i typy danych Łódź 2018 Ćwiczenie Body Mass Index - Edytuj kod programu - Zapisz go w pliku bmi.py - Uruchom skrypt >>> Enter your name: Jacek >>> Enter

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Podstawy. Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS Informatyka Stosowana

Podstawy. Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS Informatyka Stosowana Podstawy 1 Plan prezentacji Garść informacji Komentarze Stringi Wbudowane typy liczbowe Konstrukcja print Pobieranie danych Konstrukcja if Konstrukcja if else Konstrukcja if elif else Pętla while Pętla

Bardziej szczegółowo

Metody getter https://www.python-course.eu/python3_object_oriented_programming.php 0_class http://interactivepython.org/runestone/static/pythonds/index.html https://www.cs.auckland.ac.nz/compsci105s1c/lectures/

Bardziej szczegółowo

Dawid Gierszewski Adam Hanasko

Dawid Gierszewski Adam Hanasko Dawid Gierszewski Adam Hanasko Chcemy stworzyć klasę w której możemy przechowywać dwie zmienne dowolnych typów Tworzymy tyle różnych klas ile potrzeba: Class ParaInt{ int pierwszy; Int drugi; Class ParaButow{

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Smalltalk Marcin Benke 15 stycznia 2007 Marcin Benke (MIMUW) Programowanie Obiektowe i C++ 15 stycznia 2007 1 / 26 Marcin Benke (MIMUW) Programowanie Obiektowe i C++ 15 stycznia

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

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

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

rozdział 4: ZMIENNE I INSTRUKCJE

rozdział 4: ZMIENNE I INSTRUKCJE rozdział 4: ZMIENNE I INSTRUKCJE ostatnia modyfikacja: 04.12.18 definicja: zmienna to nazwany kontener służący do przechowywania danych na razie skupimy się na zmiennych przechowujących dane liczbowe i

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 8 Wprowadzenie Definiowanie typu obiektowego Porównywanie obiektów Tabele z obiektami Operacje DML na obiektach Dziedziczenie -

Bardziej szczegółowo

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

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

Przegląd języka Python. Łukasz Anwajler

Przegląd języka Python. Łukasz Anwajler Przegląd języka Python Łukasz Anwajler lukasz.anwajler@pjwstk.edu.pl Nie wierzcie mi na słowo Zaraz zobaczymy: czym jest Python dlaczego warto go używać jakie ma zastosowania gdzie z niego korzystają jakzacząć

Bardziej szczegółowo

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory. Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory. Konstruktory Konstruktory w językach obiektowych są to specjalne metody wywoływane podczas tworzenia nowego obiektu i służące do

Bardziej szczegółowo

Podstawy programowania w Pythonie

Podstawy programowania w Pythonie Podstawy programowania w Pythonie Wykład 2 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie 10 października 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania

Bardziej szczegółowo

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe Programowanie i projektowanie obiektowe Metody i dziedziczenie Paweł Daniluk Wydział Fizyki Jesień 2015 P. Daniluk (Wydział Fizyki) PO w. V Jesień 2015 1 / 31 Metody Przypomnienie Obiekty odpowiadają za

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

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

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) przeznaczony do programowania zarówno pod ios jak i Mac OS X bazuje na logice Objective-C bez kompatybilności

Bardziej szczegółowo

PHP 5 język obiektowy

PHP 5 język obiektowy PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje

Bardziej szczegółowo

10. Programowanie obiektowe w PHP5

10. Programowanie obiektowe w PHP5 Ogólnie definicja klasy wygląda jak w C++. Oczywiście elementy składowe klasy są zmiennymi PHP, stąd nieśmiertelne $. Warto zauważyć, że mogą one mieć wartość HHH mgr inż. Grzegorz Kraszewski TECHNOLOGIE

Bardziej szczegółowo

Środowisko programisty

Środowisko programisty Środowisko programisty 1/34 Środowisko programisty Język Python cz. 1 dr inż. Grzegorz Michalski 24 marca 2014 Środowisko programisty 2/34 Wstęp Uruchamianie interpretera python Wykonywalne skrypty #!/usr/bin/python

Bardziej szczegółowo

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

2. Składnia Pythona. Robert Janczewski. Gdańsk, 2014

2. Składnia Pythona. Robert Janczewski. Gdańsk, 2014 Gdańsk, 2014 Czym jest Python? Python a C Struktura programu Zmienne i zarządzanie pamięcią Przykład Python to język programowania, który został zaprojektowany tak, by można było szybko tworzyć czytelne

Bardziej szczegółowo

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

Wykład 2 Składnia języka C# (cz. 1) Wizualne systemy programowania Wykład 2 Składnia języka C# (cz. 1) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Budowa projektu 2 Struktura programu

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe Informacje

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Wykład 4 Piotr Błaszyński Wydział Inmatyki Zachodniopomorskiego Uniwersytetu Technologicznego 16 lutego 2018 i zawieranie się, gromadzenie elementów nowa klasa powstaje przez użycie obiektów klas już istniejących,

Bardziej szczegółowo

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

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Dziedziczenie Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasy Student oraz Pracownik: class Student class Pracownik

Bardziej szczegółowo

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

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. PYTHON Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. Aby program napisany w danym języku mógł być wykonany, niezbędne

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Wykład 2 28 lutego 2019 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Język C Krótka

Bardziej szczegółowo

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe Programowanie i projektowanie obiektowe Python od środka Paweł Daniluk Wydział Fizyki Jesień 2016 P. Daniluk(Wydział Fizyki) PO w. VIII Jesień 2016 1 / 26 Zasięgi nazw (ang. scopes) Przestrzeń nazw Mapowanie

Bardziej szczegółowo

Podstawy bioinformatyki 2017/18

Podstawy bioinformatyki 2017/18 JEZYK PROGRAMOWANIA PYTHON: SEKWENCJE (ŁAŃCUCHY, LISTY, KROTKI), METODY LIST E. Dyguda-Kazimierowicz 1 Sekwencje: indeksowanie i wycinanie Poznane dotąd obiekty łańcuchowe należą do typu danych złożonych

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 8 - wprowadzenie do obsługi plików tekstowych i wyjątków mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 11 grudnia 2017 1 / 34 mgr inż. Krzysztof

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

Programowanie w Sieci Internet. Python: Operacje z plikami oraz obsługa wyjątków

Programowanie w Sieci Internet. Python: Operacje z plikami oraz obsługa wyjątków Programowanie w Sieci Internet Python: Operacje z plikami oraz obsługa wyjątków Kraków, 5 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki Otwieranie plików Otwieranie plików jest realizowane

Bardziej szczegółowo

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

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop. 2016 Spis treści Przedmowa 1 Stosowana notacja 1 1. Wprowadzenie 3 1.1. Konsola interaktywna języka Scala 3 1.2. Zmienne 5 1.3. Wartości

Bardziej szczegółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

Języki i metody programowania

Języki i metody programowania Języki i metody programowania Wykład 4 dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie hab. Andrzeja Zbrzezngo Podstawy języka Python

Bardziej szczegółowo

Technologie cyfrowe semestr letni 2018/2019

Technologie cyfrowe semestr letni 2018/2019 Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 8 (15.04.2019) Kompilacja Kompilacja programu (kodu): proces tłumaczenia kodu napisanego w wybranym języku na kod maszynowy, zrozumiały

Bardziej szczegółowo

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu

Bardziej szczegółowo

Python wstęp. Michał Bereta www.michalbereta.pl

Python wstęp. Michał Bereta www.michalbereta.pl Python wstęp Michał Bereta www.michalbereta.pl Wprowadzenie... 1 Źródła wiedzy... 1 Uruchomienie interpretera Pythona... 2 Python jako kalkulator użycie interaktyne... 2 Uruchamianie skryptów z plików...

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

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

Zaawansowane programowanie w języku C++ Klasy w C++ Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń

Bardziej szczegółowo

Dziedziczenie. Tomasz Borzyszkowski

Dziedziczenie. Tomasz Borzyszkowski Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.

Bardziej szczegółowo

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków... Plan wykładu Spis treści 1 Kursory 1 2 Wyjątki 4 2.1 Wyjątki predefiniowane............................. 4 2.2 Wyjątki niezdefiniowane wcześniej....................... 5 2.3 Definiowanie własnych wyjątków........................

Bardziej szczegółowo

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

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami

Bardziej szczegółowo

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania Wykład 11. 4 stycznia 2010 1 Kontrola poprawności podczas biegu programu 2 3 4 Asercje Asercja to formuła logiczna; Asercji używa się do kontrolowania czy np. wartość zmiennej ma odpowiedni typ lub mieści

Bardziej szczegółowo

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

Języki i metody programowania Java. Wykład 2 (część 2) Języki i metody programowania Java INF302W Wykład 2 (część 2) Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Identyfikacja danych reprezentowanych przez klasy podczas opracowania koncepcji prostego

Bardziej szczegółowo

Właściwości i metody obiektu Comment Właściwości

Właściwości i metody obiektu Comment Właściwości Właściwości i metody obiektu Comment Właściwości Właściwość Czy można zmieniać Opis Application nie Zwraca nazwę aplikacji, która utworzyła komentarz Author nie Zwraca nazwę osoby, która utworzyła komentarz

Bardziej szczegółowo