Programowanie Obiektowe i C++

Podobne dokumenty
Programowanie Obiektowe i C++

Programowanie Obiektowe i C++

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Programowanie Obiektowe i C++

Programowanie obiektowe

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie Obiektowe i C++

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

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

Wykład 5: Klasy cz. 3

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

Programowanie obiektowe

Programowanie obiektowe - 1.

Podstawy Programowania Obiektowego

Wykład 8: klasy cz. 4

Programowanie obiektowe

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

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

Wykład 4: Klasy i Metody

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

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

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

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

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Programowanie obiektowe

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

Inne podejścia obiektowe. Referat na seminarium magisterskie Zagadnienia Programowania Obiektowego Dymitr Pszenicyn

Języki i techniki programowania Ćwiczenia 2

Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików.

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

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Materiały do zajęć VII

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

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

Programowanie i projektowanie obiektowe

Programowanie obiektowe

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

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

10. Programowanie obiektowe w PHP5

Programowanie obiektowe

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Materiały do laboratorium MS ACCESS BASIC

Programowanie Proceduralne

PHP: bloki kodu, tablice, obiekty i formularze

Szablony klas, zastosowanie szablonów w programach

Laboratorium 1 - Programowanie proceduralne i obiektowe

Podstawy Programowania 2

Polimorfizm. dr Jarosław Skaruz

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

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

Dziedziczenie. Tomasz Borzyszkowski

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

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

Kurs rozszerzony języka Python

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

Programowanie obiektowe

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Wykład 9: Polimorfizm i klasy wirtualne

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

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

Java Język programowania

Definiowanie własnych klas

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

Definicje klas i obiektów. Tomasz Borzyszkowski

Platformy Programistyczne Podstawy języka Java

Metaprogramowanie w Ruby

Automatyzacja kompilacji. Automatyzacja kompilacji 1/28

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

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

Język C++ Programowanie obiektowe

Programowanie w Internecie. Java

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

PODSTAWOWE ZASADY PROGRAMOWANIA OBIEKTOWEGO NA BAZIE PAKIETU ROOT

Języki i techniki programowania Ćwiczenia 4 Wzorce

Wykład 1: Wskaźniki i zmienne dynamiczne

Programowanie Obiektowe i C++

Delphi podstawy programowania. Środowisko Delphi

PARADYGMATY PROGRAMOWANIA Wykład 3

Rozdział 4 KLASY, OBIEKTY, METODY

Paradygmaty programowania

Przeciążanie operatorów

LibreOffice Calc VBA

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Diagramy klas. dr Jarosław Skaruz

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

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

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

Test przykładowy 2 PAI WSB Wrocław /06/2018

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

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

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

Transkrypt:

Programowanie Obiektowe i C++ Marcin Benke 15 stycznia 2007 1

1 Make Kompilacja i łaczenie Każdy plik z implementacją kompilujemy do pliku obiektowego z rozserzeniem.o (pod Windows.obj), np. g++ -c dtest.cpp g++ -c drawing.cpp Na zakończenie łączymy uzyskane pliki obiektowe w plik wykonywalny, np: g++ -o dtest dtest.o drawing.o Gotowe biblioteki możemy dołączyć używając opcji -l,np g++ -o dtest -lx11 dtest.o drawing.o dołącza bibliotekę zawierającą podstawowe funkcje systemu Xwindow. opcja -L mówi, gdzie szukać bibliotek Makefile Zwykle wygodnie jest użyć programu make, opisując proces kompilacji w Makefile: all: dtest drawing.o: drawing.cpp drawing.h g++ -c drawing.cpp dtest.o: dtest.cpp drawing.h g++ -c dtest.cpp dtest: dtest.o drawing.o g++ -o dtest -lx11 dtest.o drawing.o 2

Zawartość Makefile cele (np all) zależności między nimi (cel all zależy od celu dtest czynności, które trzeba wykonać dla osiągnięcia celu Celem jest zwykle stworzenie pewnego pliku; cel jest osiągnięty jeśli plik ten istnieje i jest nowszy od swoich zależności. Jeśli wywołamy make bez argumentów, dążymy do pierwszego celu. Zmienne LIBS=-lX11 all: dtest drawing.o: drawing.cpp drawing.h g++ -c drawing.cpp dtest.o: dtest.cpp drawing.h g++ -c dtest.cpp dtest: dtest.o drawing.o g++ -o dtest $(LIBS) dtest.o drawing.o Zmienne specjalne np $@ bieżący cel $< pierwsza zależność $^ wszystkie zależności dtest.o: dtest.cpp drawing.h g++ -c $< dtest: dtest.o drawing.o g++ -o $@ $(LIBS) $(LDFLAGS) $^ 3

Makefile LIBS=-lX11 LDFLAGS=-L/usr/X11R6/lib -g dtest: dtest.o drawing.o g++ -o $@ $(LIBS) $(LDFLAGS) $^ drawing.o: drawing.cpp drawing.h g++ -c $< dtest.o: dtest.cpp drawing.h g++ -c $< clean: -rm -f dtest -rm -f *.o Makefile Plik Makefile składa się z definicji zmiennych (CFLAGS, LDFLAGS) oraz reguł. Reguły mają składnie następującą: cel : zależności TAB polecenia make kompiluje tylko te pliki które są nieaktualne, tj. starsze od plików od których zależą. Korzysta w tym celu z reguł wyspecyfikowanych w pliku, oraz z tzw. reguł domyślnych. 4

2 Smalltalk Smalltalk Stworzony w latach 70-tych w firmie Xerox. Język czysto obiektowy: "wszystko jest obiektem". Sterowanie przez wysyłanie komunikatów. Pierwszy język dla którego stworzono IDE; prekursor dzisiejszych języków wizualnych Programy są tworzone przez dodawanie nowych klas do środowiska. Stan środowiska razem z kodem programu są zapisywane do pliku obrazu (image file) Charakterystyczne cechy Smalltalku wszystko jest obiektem (chyba, że jest metodą) także klasy są obiektami program = biblioteka klas + obiekty zadeklarowanie nowej klasy oznacza dodanie jej do biblioteki klas nie ma rozróżnienia pomiędzy klasami standardowymi a klasami użytkownika, wszystko można modyfikować brak typów zmiennych Smalltalk wartością zmiennej może być dowolny obiekt. Nie ma żadnej kontroli w czasie kompilacji. Jeśli obiekt nie rozumie komunikatu, jest błąd w czasie wykonania programu Wszystko jest obiektem Przykłady: 3 ala ma kota 5

licznik Klasa - wzorzec dla obiektów Przykłady: Integer String Count Każda klasa jest podklasą klasy Object Komunikaty i metody Klasa też jest obiektem (np. Count class) klasa Count jest jedynym obiektem klasy Nowy obiekt powstaje przez wysłanie komunikatu new do klasy, lub jest literałem (3, ala ma kota ) IntegerCount new Obiekt odbiera komunikaty i reaguje na nie wykonując akcje zdefiniowane w odpowiednich metodach. 2 + 3 licznik increment Deklaracja klasy Nadklasa i nazwa klasy atrybuty: zwykłe klasowe inne metody Wszystkie atrybuty są prywatne (widoczne tylko dla danej klasy). Wszystkie metody są publiczne i wirtualne. 6

Licznik Object subclass: #Count instancevariablenames: value resetvalue classvariablenames: initialize self reset resetvalue ^resetvalue resetvalue: avalue resetvalue := avalue. value ^value value: avalue value := avalue. decrement "Musi być zaimplementowane w podklasie" increment "Musi być zaimplementowane w podklasie" reset value := resetvalue Metody Metoda: funkcja opisująca akcje obiektu metoda zeroargumentowa: nazwa treść treść - zmienne tymczasowe i ciąg wyrażeń oddzielonych kropkami metoda jednoargumentowa (operator dwuaargumentowy) 7

znak_specjalny argument treść metoda wieloargumentowa Wyrażenia nazwa1: argument1 nazwa2: argument2... treść przesłanie komunikatu przypisanie odbiorca komunikat+argumenty zmienna wyrażenie wyrażenie przekazujące wynik z metody ^wyrażenie Przykłady wyrażeń x wypisz: ekran kolekcja add: x after: y 2 + 3 x := Count new ^x Komunikaty unarne (zero parametrów) odbiorca nazwa_komunikatu licznik reset 3 negated abcde size 5 factorial binarne (1 parametr) odbiorca znak_specjalny parametr x == 2 1 = 4 2 + 3 abc, de 8

Komunikaty złożone (keyword, wiele parametrów) odbiorca nazwa1: par1 nazwa2: par2... tab at: 1 put: 3 licznik asbase: 8 kaskada (wysłanie wielu komunikatów do tego samego odbiorcy) tab at: 1 put: ala ; at: 2 put: ma ; at: 3 put: asa Deklaracja klasy NazwaNadklasy subclass: #NazwaKlasy instancevariablenames: zmienna1 zmienna2... classvariablenames: Zmienna1 Zmienna2... pooldictionaries: Pool1 Pool2... Zmienne egzemplarzowe (indywidualne, obiektowe) Zmienne klasowe atrybuty wspólne dla wszystkich obiektów danej klasy pule (słowniki) pule zmiennych globalnych, wspólne dla obiektów klas, w których są wymienione zmienne globalne (słownik System) wspólne dla wszystkich obiektów Rodzaje metod Nie ma innych zmiennych globalnych klasowe wykonywane są w klasie, mogą działać na zmiennych globalnych i na zmiennych klasowych kategorie inicjalizacja zmiennych klasowych tworzenie nowych obiektów 9

egzemplarzowe (obiektowe) wykonywane w obiektach, mogą działać na zmiennych egzemplarzowych, klasowych i globalnych kategorie dostęp do atrybutów porównywanie obiektów kopiowanie wyświetlanie inicjalizacja obiektu pomocnicze (prywatne)... Metody klasowe W C++ i w Javie konstruktory są magiczne. W Smalltalku są po prostu metodami klasowymi. Najczęściej jest to metoda new, ale mogą być też inne. " Count class methodsfor: instance-creation " new ^super new initialize Komunikaty do self Podobnie jak this w C++ i Javie, ale... Odbiorcą jest obiekt, w którym wykonuje się wysłanie komunikatu Poszukiwanie metody dla komunikatu rozpoczyna się od obiektu, w którym wykonuje się wysłanie komunikatu (niekoniecznie w tej, w której on tekstowo występuje) Jest to wiązanie dynamiczne inaczej niż w C++ i w Javie dokonuje się ono dopiero na etapie wykonania. 10

Komunikaty do self przykład Object subclass: #Jeden test ^1 result1 ^self test x1 := Jeden new. x2 := Dwa new x1 test 1 x1 result1 1 x2 test 2 x2 result1 2 Jeden subclass: #Dwa test ^2 Komunikaty do super Podobnie jak Nadklasa::metoda(...) w C++ Odbiorcą jest obiekt wyznaczony przez self. Poszukiwanie metody zaczyna się od nadklasy klasy, w której występuje tekstowo dany komunikat. Jest to wiązanie statyczne (można go dokonać na etapie kompilacji). Komunikaty do super przykład 11

Dwa subclass: #Trzy result2 ^self result1 result3 ^super test Trzy subclass: #Cztery x3 := Trzy new. x4 := Cztery new x3 test 2 x4 result1 4 x3 result2 2 x4 result2 4 x3 result3 2 x4 result3 2 test ^4 Licznik numeryczny Count subclass: #IntegerCount instancevariablenames: classvariablenames: initialize resetvalue := 0. super initialize decrement value := value - 1 increment value := value + 1 Licznik ASCII Count subclass: #ASCIICount instancevariablenames: classvariablenames: pooldictionaries: ASCIICount methodsfor: initialize-release initialize 12

resetvalue := $a. super initialize ASCIICount methodsfor: counting decrement newasciivalue newasciivalue := value asinteger <= 32 iftrue: [126] iffalse: [value asinteger - 1]. ^self value: (Character value: newasciivalue) increment newasciivalue newasciivalue := value asinteger >= 126 iftrue: [32] iffalse: [value asinteger + 1]. ^self value: (Character value: newasciivalue) Bloki Bloki są anonimowymi funkcjami [:arg1 :arg2 S1. S2.... Sn ] bloki są obiektami klasy BlockContext. mogą być przypisywane na zmienne, przekazywane jako argumenty i dawane w wyniku w miejscu wystąpienia blok nie jest wykonywany; tworzony jest tylko egzemplarz klasy BlockContext. Blok może być wykonany przez wysłanie doń komunilatu value. Daje to w wyniku wartość ostatniego wyrażenia wykonanego w bloku. [i:=2+2] value [:x :y x+y*3] value: 2 value: 5 Blok może mieć zmienne lokalne: [:arg locals stmts] Zmienne nielokalne są wiązane statycznie. 13

Instrukcje warunkowe cond iftrue: ablock cond iffalse: ablock cond iftrue: ablock1 iffalse: ablock2 cond iffalse: ablock iftrue: ablock2 cond musi być obiektem klasy True lub False self = 0 iftrue: [^self error: zero has no reciprocal ] iffalse: [^1 / self] Formalnie iftrue: etc. są zwykłymi komunikatami; zachowują się, jakby klasa True miała metody iftrue: trueblock iffalse: falseblock ^trueblock value iffalse: ablock ^nil etc... W praktyce zwykle implementacje Smalltalka dokonują pewnych optymalizacji. 3 Koniec 14