Programowanie Obiektowe i C++

Podobne dokumenty
Programowanie Obiektowe i C++

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

Podstawy Programowania Obiektowego

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

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

Programowanie Obiektowe i C++

Programowanie obiektowe

Wykład 8: klasy cz. 4

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

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

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

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

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

Materiały do zajęć VII

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Podstawy Programowania 2

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

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

Automatyzacja kompilacji. Automatyzacja kompilacji 1/28

Programowanie Proceduralne

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

Wykład 4: Klasy i Metody

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

Wykład 5: Klasy cz. 3

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

Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe - 1.

Programowanie obiektowe

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

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

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

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

LibreOffice Calc VBA

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

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

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

Języki i techniki programowania Ćwiczenia 2

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

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

Przypomnienie o klasach i obiektach

Laboratorium 1 - Programowanie proceduralne i obiektowe

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

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

Przeciążanie operatorów

PHP: bloki kodu, tablice, obiekty i formularze

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

Definiowanie własnych klas

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

Programowanie obiektowe

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie Obiektowe i C++

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

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

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

Wykład 9: Polimorfizm i klasy wirtualne

Delphi podstawy programowania. Środowisko Delphi

Polimorfizm. dr Jarosław Skaruz

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie i projektowanie obiektowe

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

Programowanie obiektowe

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

Wyjątki (exceptions)

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

PODSTAWOWE ZASADY PROGRAMOWANIA OBIEKTOWEGO NA BAZIE PAKIETU ROOT

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

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

Wstęp do Programowania 2

Definicje klas i obiektów. Tomasz Borzyszkowski

Materiały do laboratorium MS ACCESS BASIC

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

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

Kompilacja i scalanie programów w linii poleceń gcc i make

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

Metaprogramowanie w Ruby

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

Programowanie w Internecie. Java

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Smarty PHP. Leksykon kieszonkowy

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Szablony klas, zastosowanie szablonów w programach

Elementy języka Scheme

10. Programowanie obiektowe w PHP5

dr inż. Jarosław Forenc

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

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Diagramy klas. dr Jarosław Skaruz

Programowanie obiektowe

Aplikacje w środowisku Java

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

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

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

Zaawansowane programowanie w C++ (PCP)

Transkrypt:

Programowanie Obiektowe i C++ Marcin Benke 16 stycznia 2005 Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 1 / 26

Kompilacja i łaczenie Każdy plik z implementacja kompilujemy do pliku obiektowego z rozserzeniem.o (pod Windows.obj), np. g++ -c dtest.cpp g++ -c drawing.cpp Na zakończenie łaczymy uzyskane pliki obiektowe w plik wykonywalny, np: g++ -o dtest dtest.o drawing.o Gotowe biblioteki możemy dołaczyć używajac opcji -l,np g++ -o dtest -lx11 dtest.o drawing.o dołacza bibliotekę zawierajac a podstawowe funkcje systemu Xwindow. opcja -L mówi, gdzie szukać bibliotek Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 2 / 26

Makefile Zwykle wygodnie jest użyć programu make, opisujac 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 Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 3 / 26

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 osiagnięcia celu Celem jest zwykle stworzenie pewnego pliku; cel jest osiagnięty jeśli plik ten istnieje i jest nowszy od swoich zależności. Jeśli wywołamy make bez argumentów, dażymy do pierwszego celu. Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 4 / 26

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 Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 5 / 26

Zmienne specjalne np $@ bieżacy 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) $^ Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 6 / 26

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 Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 7 / 26

Makefile Plik Makefile składa się z definicji zmiennych (CFLAGS, LDFLAGS) oraz reguł. Reguły maja składnie następujac a: cel : zależności TAB polecenia make kompiluje tylko te pliki które sa nieaktualne, tj. starsze od plików od których zależa. Korzysta w tym celu z reguł wyspecyfikowanych w pliku, oraz z tzw. reguł domyślnych. Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 8 / 26

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 sa tworzone przez dodawanie nowych klas do środowiska. Stan środowiska razem z kodem programu sa zapisywane do pliku obrazu (image file) Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 9 / 26

Smalltalk Wszystko jest obiektem Przykłady: 3 ala ma kota licznik Klasa - wzorzec dla obiektów Przykłady: Integer String Count Każda klasa jest podklasa klasy Object Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 10 / 26

Komunikaty i metody Klasa też jest obiektem. 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 wykonujac akcje zdefiniowane w odpowiednich metodach. 2 + 3 licznik increment Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 11 / 26

Licznik Object subclass: #Count instancevariablenames: value resetvalue classvariablenames: " Count methodsfor: initialize-release " initialize self reset " Count methodsfor: accessing " resetvalue ^resetvalue resetvalue: avalue resetvalue := avalue. Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 12 / 26

value ^value value: avalue value := avalue. Count methodsfor: counting decrement " Musi być zaimplementowane w podklasie" increment " Musi być zaimplementowane w podklasie" reset value := resetvalue Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 13 / 26

Metody klasowe " Count class methodsfor: instance-creation " new ^super new initialize Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 14 / 26

Metody Metoda: funkcja opisujaca akcje obiektu metoda zeroargumentowa: nazwa treść treść - zmienne tymczasowe i ciag wyrażeń oddzielonych kropkami metoda jednoargumentowa (operator dwuaargumentowy) znak_specjalny argument treść metoda wieloargumentowa nazwa1: argument1 nazwa2: argument2... treść Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 15 / 26

Wyrażenia wyrażenie = komunikat odbiorca nazwa_komunikatu_z_argumentami np. x + 3 x wypisz: ekran Count new kolekcja add: x after: y wyrażenie przekazujace wynik z metody: ^wyrażenie Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 16 / 26

Count subclass: #IntegerCount instancevariablenames: classvariablenames: initialize resetvalue := 0. super initialize decrement value := value - 1 increment value := value + 1 Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 17 / 26

Charakterystyczne cechy Smalltalku wszystko jest obiektem (chyba, że jest metoda) także klasy sa 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 wartościa zmiennej może być dowolny obiekt. Nie ma żadnej kontroli w czasie kompilacji. Jeśli obiekt nie rozumie komunikatu, jest bład w czasie wykonania programu Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 18 / 26

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 Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 19 / 26

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 Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 20 / 26

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 sa wymienione zmienne globalne (słownik System) wspólne dla wszystkich obiektów Nie ma innych zmiennych globalnych Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 21 / 26

Rodzaje metod klasowe wykonywane sa w klasie, moga działać na zmiennych globalnych i na zmiennych klasowych kategorie inicjalizacja zmiennych klasowych tworzenie nowych obiektów egzemplarzowe (obiektowe) wykonywane w obiektach, moga 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) Marcin Benke... () Programowanie Obiektowe i C++ 16 stycznia 2005 22 / 26

Licznik ASCII Count subclass: #ASCIICount instancevariablenames: classvariablenames: pooldictionaries: ASCIICount methodsfor: initialize-release initialize resetvalue := $a. super initialize Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 23 / 26

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) Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 24 / 26

Bloki Bloki saanonimowymi funkcjami [:arg1 :arg2 S1. S2.... Sn ] bloki sa obiektami klasy BlockContext. moga być przypisywane na zmienne, przekazywane jako argumenty i dawane w wyniku w miejscu wystapienia 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 sa wiazane statycznie. Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 25 / 26

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. sa zwykłymi komunikatami; zachowuja się, jakby klasa True miała metody iftrue: trueblock iffalse: falseblock ^trueblock value iffalse: ablock ^nil etc... Marcin Benke () Programowanie Obiektowe i C++ 16 stycznia 2005 26 / 26