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



Podobne dokumenty
Programowanie obiektowe - 1.

Podstawy Programowania Obiektowego

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

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

Modelowanie i Programowanie Obiektowe

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

Język programowania. Andrzej Bobyk

Technologie i usługi internetowe cz. 2

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

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

Materiały do zajęć VII

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

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

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

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

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

Definiowanie własnych klas

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

Zapis programu z wykorzystaniem modułu (Podstawy Delphi 2.1, 2.2, 2.3 str11 )

TEMAT : KLASY DZIEDZICZENIE

Do czego służą klasy?

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

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

Dziedziczenie. dr Jarosław Skaruz

Programowanie obiektowe

Programowanie obiektowe W1 Wprowadzenie. Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki

Enkapsulacja, dziedziczenie, polimorfizm

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

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Wykład 8: klasy cz. 4

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

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

Podstawy Programowania semestr drugi. Wykład czternasty

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

Podstawy Języka Java

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Dziedziczenie. Tomasz Borzyszkowski

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

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

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Technologie obiektowe

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Dokumentacja do API Javy.

JAVA W SUPER EXPRESOWEJ PIGUŁCE

10. Programowanie obiektowe w PHP5

Programowanie obiektowe

PHP 5 język obiektowy

Delphi Laboratorium 3

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

Język C++ Programowanie obiektowe

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe

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

Modelowanie diagramów klas w języku UML. Łukasz Gorzel @stud.umk.pl 7 marca 2014

Mechanizm dziedziczenia

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

Kurs WWW. Paweł Rajba.

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Programowanie obiektowe

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

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

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

Programowanie obiektowe. Wprowadzenie

Tworzenie własnych komponentów

Paweł Kurzawa, Delfina Kongo

Zaawansowane programowanie w C++ (PCP)

Oracle PL/SQL. Paweł Rajba.

Zaawansowane programowanie w C++ (PCP)

Wykład 7: Pakiety i Interfejsy

Wstęp do programowania obiektowego. Wykład 2

Java Język programowania

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Delphi podstawy programowania. Środowisko Delphi

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

Programowanie obiektowe

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

KLASY cz.1. Dorota Pylak

Rysunek 1: Przykłady graficznej prezentacji klas.

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

Abstrakcyjny typ danych

Dziedziczenie jednobazowe, poliformizm

Podstawy Programowania Programowanie Obiektowe

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

Rozdział 4 KLASY, OBIEKTY, METODY

Do czego służą klasy?

Dziedziczenie. Zadanie 1

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

PARADYGMATY PROGRAMOWANIA Wykład 2

Wykład 5: Klasy cz. 3

hierarchie klas i wielodziedziczenie

PODSTAWY PROGRAMOWANIA

Programowanie obiektowe

Klasy abstrakcyjne i interfejsy

Szablony funkcji i klas (templates)

Transkrypt:

Typy klasowe (klasy) 1. Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która definiuje programy za pomocą obiektów elementów łączących stan (czyli dane) i zachowanie (czyli procedury, tu metody). Obiektowy program komputerowy wyrażony jest jako zbiór obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. W konstrukcji złożonych systemów informatycznych paradygmat obiektowy pozwala tworzyć systemy o lepszej jakości: ۰ Łatwość utrzymania i rozumienia kodu ۰ Odporność architektury na modyfikacje ۰ Łatwość wielokrotnego użycia ۰ Lepsze zrozumienie kodu Zbliżone jest do ludzkiego sposobu postrzegania rzeczywistości stąd łatwiej zrozumieć kod i pomysły innych programistów. 2. Założenia paradygmatu obiektowego: a. Abstrakcyjne typy danych umożliwia tworzenie od podstaw nowych typów. Jest to ograniczenie cech obiektu z otaczającego świata do cech istotnych, kluczowych z punktu widzenia programisty (uproszczenie problemu i zwiększenie jego ogólności). i. Specyfikacją i implementacją definiowanego przez programistę abstrakcyjnego typu danych jest klasa. ii. Np. traktowanie w danym kontekście instancji klasy Dąb jako instancji klasy Drzewo. b. Hermetyzacja (enkapsulacja, kapsułkowanie) polega na ukrywaniu szczegółów implementacji przed użytkownikiem obiektu. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób (poznanie lub zmiana wartości atrybutów obiektu tylko poprzez specjalne metody). Tylko wewnętrzne metody obiektu są uprawnione do zmiany jego stanu. Każdy typ obiektu prezentuje innym obiektom swój interfejs, który określa dopuszczalne metody współpracy.

c. Dziedziczenie pozwala na tworzenie typów na podstawie już istniejących (bardziej wyspecjalizowanej, rozszerzonej wersji istniejącego typu). Np. klasa Dąb jako specjalizacja klasy Drzewo. Porządkuje i wspomaga polimorfizm i enkapsulację. Dla obiektów specjalizowanych nie trzeba redefiniować całej funkcjonalności, lecz tylko tę, której nie ma obiekt ogólniejszy. i. Technika wykorzystania istniejących fragmentów kodu polega na tworzeniu nowych klas na bazie już istniejących. ii. Cechy wspólne dla wszystkich podklas definiowane są w nadklasie. iii. Podklasa może korzystać z cech nadklasy, nadpisywać jej zachowanie oraz dodawać nowe atrybuty i zachowania PojazdyKolowe PojazdySilnikowe d. Polimorfizm pozwala na dostosowanie działania obiektów do własnych oczekiwań. Programista używający obiektu nie musi wiedzieć czy konkretne zachowanie wykorzystywanego obiektu zostało zrealizowane w danym obiekcie czy też w tym po którym dziedziczy on swoje właściwości. Niektóre języki udostępniają bardziej statyczne (w trakcie kompilacji) rozwiązania polimorfizmu np. szablony i przeciążanie operatorów w C++. i. Pozwala w jednolity sposób traktować obiekty klas z hierarchii dziedziczenia przy zachowaniu ich charakterystycznego zachowania. ii. Od strony technicznej sprowadza się do tzw. późnego wiązania metod przy ich wywołaniu (decyzja z której klasy wywołać metodę podejmowana w trakcie działania programu a nie na etapie kompilacji; kompilator upewnia się, że metoda istnieje, jednak kod jest dopiero ustalany w czasie wykonania). iii. W Javie wszystkie metody zachowują się jak metody wirtualne w C++.

3. Definicje a. Klasa jest zdefiniowanym przez użytkownika typem danych, który ma swój stan (jego reprezentację) oraz pewną liczbę operacji (jego zachowanie). Klasa zawiera pewne wewnętrzne atrybuty (dane, struktury danych) oraz metody (operacje, funkcje) i opisuje zbiór obiektów o takiej samej budowie tj. posiadających takie same cechy i funkcjonalność. i. Pola (podobnie jak w rekordzie), własności (łącza do danych, przechowywanych zwykle w polach, przy odczytywaniu i zapisywaniu których można wykonywać określone operacje) i metody (procedury i funkcje) klasy określane są jako składowe klasy. ii. Np. klasa Kot opisująca cechy oraz zachowanie wspólne dla wszystkich kotów np. kolor sierści i umiejętność miauczenia. iii. Dane i metody klasy ukrywa się definiując (deklarując) je zależnie od stopnia ukrycia jako prywatne lub zabezpieczone. iv. Definicja pojedynczego typu klasowego ma postać (nawias kwadratowy oznacza, że dany element jest opcjonalny i może być pominięty): type nazwa-typu = class [abstract/sealed] [(przodek)] lista-elementów-klasy 1. Przodek identyfikator innego, wcześniej zdefiniowanego typu klasowego. Jeśli występuje w definicji to oznacza, że mamy do czynienia z dziedziczeniem. Typem klasowym, nadrzędnym w stosunku do wszystkich typów klasowych, jest typ TObject Np. predefiniowany w module System. 2. Dyrektywa sealed oznacza, że dana klasa nie może mieć potomków. 3. Dyrektywa abstract oznacza klasę abstrakcyjną. 4. Lista elementów klasy to lista deklaracji pól, własności i metod. type moja_klasa = class pole1 : Integer; procedure metoda1(parameter1 : string); v. Podstawowe kwalifikatory dostępu do składowych: public (dostęp publiczny), Metody umieszczone w sekcji public są dostępne dla wszystkich innych klas i modułów. W tej sekcji powinny znajdować się konstruktory oraz destruktory, a także metody służące do komunikowania się ze "światem zewnętrznym. type TMyClass = class public procedure Foo; // publiczna metoda

published (takie dane będą dostępne dla inspektora obiektów) protected (dostęp chroniony w klasie definiowanej i pochodnych), Metoda umieszczona w sekcji protected jest dostępna zarówno dla modułu, w którym znajduje się klasa, jak i dla całej klasy. Jest to jakby drugi poziom ochrony, gdyż metody z sekcji protected są dostępne dla innych klas, które dziedziczą po danej klasie. type TMyClass = class protected procedure Foo; // chroniona metoda strict protected Metody czy pola umieszczone w sekcji strict protected są określone jako ściśle chronione, dostęp do nich z poziomu innej klasy jest niemożliwy, chyba że z poziomu klasy potomnej. private Metody umieszczone w sekcji private są określane jako prywatne. Oznacza to, że nie będą dostępne na zewnątrz modułu, w którym znajduje się dana klasa. A zatem po próbie odwołania się do metody umieszczonej w sekcji private kompilator zasygnalizuje błąd, że nazwa owej metody nie będzie mogła być przez niego rozpoznana. type TMyClass = class private I : Integer; // prywatne pole procedure Foo; // prywatna metoda strict private Metody czy pola umieszczone w sekcji strict private są określone jako ściśle chronione, dostęp do nich z poziomu innej klasy jest niemożliwy. vi. Składowe klasy dostępne z zewnątrz stanowią interfejs klasy.

b. Obiekt stanowi odwzorowanie wycinka rzeczywistości. Jest elementem klasy, czyli zmienną typu zdefiniowanego przez klasę. i. Kiedy program działa obiekt zajmuje pewien obszar w pamięci. ii. W Delphi dla każdego obiektu w pamięci rezerwowane jest miejsce na jego pola. Natomiast dla metod danego typu tworzona jest w pamięci tylko jedna kopia i wszystkie obiekty utworzone na podstawie tego typu (klasy) z nich korzystają. iii. Zależności między obiektem a klasą są podobne do tych między zmienną i jej typem. iv. Po utworzeniu klasy można utworzyć dowolną ilość obiektów tej klasy a następnie operować na nich tak, jakby były rzeczywistymi elementami rozwiązywanego problemu. v. Jest instancją (wystąpieniem) klasy np. konkretny kot Filemon o białym kolorze sierści. vi. Stan obiektu to zbiór wartości atrybutów obiektu w danej chwili. vii. Obiekt może wykonywać na sobie pewne działania (uruchamiać zaprogramowane funkcje czyli metody, funkcje składowe) co czyni obiekt tworem aktywnym nie tylko pojemnikiem na dane. c. Przekazywanie komunikatów - proces polegający na przekazaniu danych z obiektu do obiektu lub zleceniu wywołania metody na rzecz obiektu. d. Metoda operacja (funkcja), która może być wykonana na obiekcie. Np. metoda miaucz() klasy Kot może być wywołana na rzecz konkretnego obiektu klasy Kot, np. obiektu Filemon. i. Metody wiąże się z klasami głównie po to, żeby nie zaśmiecać kodu źródłowego i samego programu nadmierną ilością funkcji globalnych, które i tak nie zostaną użyte inaczej, niż na rzecz konkretnej klasy. ii. Zaletą jest, że metoda wewnętrzna danej klasy ma dostęp do wszystkich składników tej klasy (także prywatnych i chronionych). iii. Konstruktor - Inicjuje obiekty klasy, konstruuje wartości danego typu. 1. Może być wywołany przez odwołanie do obiektu lub klasy. type moja_klasa = class pole1 : Integer; public procedure metoda1(parameter1 : Integer); constructor Inicjuj(aut, tyt : string); { } {deklaracja zmiennej} var moj_obiekt : moja_klasa; x : Integer; { } {zainicjowanie obiektu} moj_obiekt := moja_klasa.inicjuj( Autor, Tytuł );

4. Przykład: {odwołanie do składowych klasy: wywołanie metody - nazwa_obiektu.metoda, odwołanie do pola - nazwa_obiektu.pole } moj_obiekt.metoda1(x); {praca z obiektem} program Klasy; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; {definicja klasy o nazwie punkt} type punkt = class x, y : Integer; {pola} public {metody ogólnie dostępne} procedure wspolrzedne (nx, ny : Integer); function rzedna : Integer; function odcieta : Integer; constructor Inicjuj(nX, ny : Integer); {konstruktor} {ustawia nowe współrzędne} procedure punkt.wspolrzedne (nx, ny : Integer); x := nx; y := ny; {zwraca wartość pola x pole jest prywatne, więc dostęp bezpośredni jest zabroniony} function punkt.rzedna : Integer; rzedna := x; {zwraca wartość pola y pole jest prywatne, więc dostęp bezpośredni jest zabroniony} function punkt.odcieta : Integer; odcieta := y; constructor punkt.inicjuj(nx, ny : Integer); {wywołanie kostruktora typu nadrzędnego (domyślnie jest to typ TObject). Taka instrukcja zawsze powinna być pierwszą instrukcją każdego definiowanego konstruktora.} inherited Create;

{przypisanie wartości polom obiektu} x := nx; y := ny; var x1, y1 : Integer; moj_punkt : punkt; {deklaracja zmiennej typu klasowego} try writeln('podaj wspolrzedne punktu: '); readln(x1, y1); moj_punkt := punkt.inicjuj(x1, y1); {zainicjowanie obiektu} writeln('wartosci poczatkowe: x = ', moj_punkt.rzedna, ', y = ', moj_punkt.odcieta ); writeln('podaj wspolrzedne punktu: '); readln(x1, y1); moj_punkt.wspolrzedne(x1, y1); writeln('wartosci po zmianie: x = ', moj_punkt.rzedna, ', y = ', moj_punkt.odcieta ); readln; { TODO -ouser -cconsole Main : Insert code here } except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end.