Programowanie Komputerów

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Katarzyna Szafrańska kl. II ti
C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
Programowanie obiektowe
Programowanie Wizualne WYKŁAD 4
Programowanie obiektowe PO PO - LAB 2 Wojciech Pieprzyca.
Programowanie obiektowe
Programowanie obiektowe
Wzorce.
Prowadzący: mgr inż. Elżbieta Majka
PASCAL (3) dr Anna Kwiatkowska.
PROGRAMOWANIE STRUKTURALNE
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 6: Tablice, rekordy, zbiory.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 5: Typy porządkowe, wyliczeniowe i okrojone. Definiowanie.
Podstawy informatyki Powtórka Grupa: 1A Prowadzący: Grzegorz Smyk
Kurs Pascala – spis treści
Struktury.
Tablice.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Programowanie zorientowane obiektowo 1 Programowanie zorientowane obiektowo (object-oriented programming) jest to metodologia programowania bazująca na.
Dynamiczne struktury danych 1
Typy prywatne 1 Typy prywatne W Adzie typy prywatne (private types) służą do bezpiecznego udostępniania danych zdefiniowanych w pakiecie, z którego korzysta.
Typy wskaźnikowe ogólne 1 Typy wskaźnikowe ogólne (general access types) umożliwiają pośredni dostęp (indirect access), czyli przez wskaźniki, do zadeklarowanych.
Wykład 2 struktura programu elementy języka typy zmienne
1 Języki i techniki programowania prowadzący dr Grzegorz Filipczyk.
Wstęp do programowania obiektowego
Wprowadzenie do programowania w języku Turbo Pascal
Podstawy programowania
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania
Programowanie strukturalne i obiektowe
Andrzej Jędryczkowski Nie da się napisać większego programu bez podziału go na części zwane podprogramami. Podprogram to wyróżniona część programu.
Turbo Pascal Turbo Pascal - jedna z popularniejszych implementacji kompilatorów języka PASCAL, zintegrowane srodowisko programistyczne, produkt firmy Borland.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
Podstawy programowania. Język C i C++– podstawy Temat: 1
Struktura programu w Turbo Pascalu.
T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Procedury i funkcje.
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Programowanie obiektowe – zastosowanie języka Java SE
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Podstawy informatyki 2013/2014
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
Informatyka PDF Wykład 12.
Prasek Aneta, Skiba Katarzyna. Funkcje stałe const to takie funkcje, które nie mogą modyfikować stanu obiektu. Oznacza to, że funkcja stała nie może zmieniać.
Kurs języka C++ – wykład 9 ( )
Programowanie w języku C++
Podstawy programowania
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Diagram klas Kluczowymi elementami są: klasy (class)
Kurs języka C++ – wykład 4 ( )
Klasy ( uzupełnienie ). Definicja klasy Klasa jest zbiorem logicznie powiązanych danych i funkcji, przeznaczonych do realizacji konkretnego zadania; Zamknięcie.
Dziedziczenie wielobazowe. dana klasa może mieć kilka bezpośrednich klas bazowych: dana klasa może mieć kilka bezpośrednich klas bazowych: kolorpołożenie.
Programowanie Zaawansowane
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
Zmienne typy danych w VBA. MS Excel – typy danych w języku programowania VBA.
Programowanie Obiektowe – Wykład 6
Programowanie Obiektowe – Wykład 2
Zapis prezentacji:

Programowanie Komputerów prowadzący dr Grzegorz Filipczyk

Programowanie zorientowane obiektowo (ang. Object Oriented Programming) Programowanie, w którym typy stanowią najważniejszą część w konstrukcji programu. Typ rozumiany jest jako zbiór obiektów i operacji na tych obiektach. Program końcowy jest zbiorem obiektów oddziaływujących i porozumiewających się między sobą. Obiekt - struktura o ustalonej liczbie składników, z których każdy jest albo polem zawierającym dane określonego typu, albo metodą, która może wykonywać operacje na zdefiniowanych polach.

Język Pascal jako język programowania obiektowego Programowanie obiektowe pojawiło się już w języku Turbo Pascal od wersji 6.0. Bezpośrednim powodem była chęć uporządkowania prac nad nowymi wielkimi systemami software'owymi realizowanymi przez liczne zespoły programistów. Aby uniknąć niezgodności i umożliwić selektywną aktualizację wybranych podsystemów, stworzono pojęcie obiektu, jako struktury łączącej i dane i podprogramy lub funkcje. Szybko jednak programowanie zorientowane obiektowo stało się nową filozofią programowania.

Język Pascal jako język programowania obiektowego Przełom należy szczególnie do zjawiska które nazwano polimorfizmem - wielopostaciowość. Umożliwia ono użytkownikowi - programiście zmieniać działania procedur w programie napisanym wcześniej przez innego programistę. W technice programowania obiektowego zostały w języku Turbo Pascal napisane biblioteki Turbo Vision i Object Windows. Wprawdzie opanowanie tych bibliotek było trudne i czasochłonne, to jednak później umożliwiały szybkie pisanie nawet bardzo złożonych programów.

Środowisko Borland Delphi Środowisko Borland Delphi jest już wyłącznie środowiskiem OOP - programowania zorientowanego obiektowo. Bazuje ono na analogicznych bibliotekach programowania obiektowego, upraszczających i przyspieszających znakomicie pisanie programów. Delphi, w ułatwianiu procesu programowania idzie dalej niż Borland Pascal - w przypadku programów nieskomplikowanych programista nie musi nawet w systemie Borland Delphi poznawać struktury predefiniowanych klas, obiektów oraz ich pól i metod. Jedynie bardzo już zaawansowane programowanie, np. tworzenie własnych lub modyfikacja istniejących komponentów, wymaga znajomości struktur klas.

Obiekt, w rozumieniu języka Borland Pascal Obiekt, w rozumieniu języka Borland Pascal (w Delphi operujemy pojęciem klasy, jednak nadal pojęcie obiektu jako typu jest dopuszczone, choć niezalecane), składa się z pól oraz metod. Polem nazywamy dowolną strukturę danych z wyjątkiem pliku dyskowego. Metoda jest procedurą lub funkcją. Metody działają na danych określonych w polach. Wskazane jest aby całość danych potrzebnych do określenia i działania obiektu była częścią składową tego obiektu. Nie zaleca się wykorzystywania tych danych poza obiektem, a jedynie wewnątrz, przez własne metody obiektu.

Cechy obiektów Obiekt posiada następujące trzy fundamentalne cechy: hermetyzacja, nazywana inaczej enkapsulacją. Dane i kod (pola i metody) są organiczną jednością decydującą o zachowaniu się obiektu; tylko wybrane aspekty tego zachowania widoczne są dla innych obiektów; dziedziczenie. Mając dany obiekt (przodka), możemy na jego bazie stworzyć obiekt pochodny (potomka), który będzie wzbogacony o nowe elementy w stosunku do swojego pierwowzoru i/lub będzie zachowywał się w sposób zmodyfikowany. Pola i metody obiektu - przodka zostają wykorzystane, bez potrzeby programowania analogicznych pól i metod obiektu - potomka; polimorfizm. W ciągu dziedziczenia, od najstarszego przodka do najmłodszego potomka, można wyróżnić określoną cechę, która będzie przyjmować wiele form (postaci) uzewnętrzniania się. Przetwarzając obiekt - potomka, można, dzięki polimorfizmowi, modyfikować działanie metod przodka, nawet wówczas gdy kod źródłowy tych metod nie jest dostępny.

W Borland Delphi W Borland Delphi operujemy typem obiektowym, który nazywa się klasą (class). Obiektem natomiast (object) nazywamy jedną z wielu możliwych realizacji (instances) danej klasy. Obiekt, czyli realizacja klasy, jest to dynamicznie alokowany blok pamięci operacyjnej, którego rozmiar i struktura określona jest przez jego klasę. Zmienną typu klasa jest natomiast wskaźnik (pointer), wskazujący na związany z nim obiekt (ściślej na początek bloku pamięci operacyjnej zajmowanego przez obiekt; obiekt jest natomiast zmienną dynamiczną lub inaczej tzw. wskazywaną).

Klasa Klasa to struktura łącząca pola (fields), metody (methods) oraz właściwości (properties). Pole to zmienna, będąca elementem obiektu. Jest to pojęcie analogiczne do pola rekordu. Metoda jest to procedura lub funkcja związana z klasą. Właściwość jest to wielkość definiująca jeden z atrybutów obiektu. Wartość danej właściwości jest zwykle przechowywana w jednym z pól obiektu. Właściwość posiada klauzule dostępu (access specifiers), które określają jak dana właściwość jest odczytywana i/lub modyfikowana.

Deklaracja klasy ma postać następującą type ClassName = class (AncestorClass) ............................................. MemberList end; gdzie: ClassName - nazwa klasy; AncestorClass - nazwa klasy - przodka w stosunku do danej klasy; MemberList - lista członów klasy.

Elementy deklaracji klasy AncestorClass jest to element opcjonalny. Jeśli nie zostanie podany, to przyjmuje się, że przodkiem danej klasy jest klasa TObject, będący najstarszym przodkiem wszystkich klas w Delphi. MemberList jest to lista wszystkich członów danej klasy. Pod pojęciem członów rozumie się pola, metody i właściwości, czyli elementy danej klasy

Klasy w Delphi Klasy w Delphi stanowią rozbudowane drzewo dziedziczenia. Każdy komponent w Delphi jest klasą. Przykładowo: komponent MainMenu (główne menu aplikacji) w Delphi 7 jest klasą o nazwie TMainMenu, która dziedziczy pola, metody i właściwości w ciągu dziedziczenia klas: TObject - TPersistent - TComponent - TMenu - TMainMenu Szczegóły tego ciągu można studiować zaznaczając dany komponent, wywołując Help poprzez Ctrl-F1 oraz wybierając opcję Hierarchy, a następnie nazwy poszczególnych klas. Nie jest to jednak konieczne, można bowiem, pisząc średnio zaawansowane aplikacje, wykorzystywać każdy komponent, nie interesując się jego miejscem w strukturze klas środowiska.

Ważniejsze typy w hierarchii klas

Dziedziczenie i pokrywanie się członów klas W momencie deklarowania klasy, możliwe jest wskazanie jej przodka (ancestor). Dana klasa stanie się wówczas potomkiem (descendant), który będzie dziedziczyć od przodka wszystkie człony tj. pola, metody i właściwości. Można zadeklarować nowe dodatkowe człony. Ich zasięg ważności będzie sięgał od miejsca deklaracji i rozciągać się na bloki wszystkich metod danej klasy i na wszystkich potomków danej klasy. Jeśli zadeklaruje się u potomka nowe człony o tych samych nazwach jak u przodka, to nowe człony pokryją (przysłonią) analogiczne człony przodka, jednak nie zlikwidują ich. Będą one nadal dostępne, ale pod warunkiem ich jawnego wywołania, to znaczy wraz z poprzedzającą nazwą przodka.

Widoczność W Delphi każdy człon klasy cechuje się zasięgiem swojej widoczności przez inne elementy aplikacji (visibility). Istnieją następujące klauzule widoczności członów klas: private (prywatne) protected (chronione) public published (publikowane) automated (automatyczne)

private (prywatne) Człony tego typu są widoczne jedynie wewnątrz modułu, w którym znajduje się deklaracja klasy;

protected (chronione) Człony tego typu są widoczne jedynie wewnątrz modułu, w którym znajduje się deklaracja klasy, a także przez wszystkich potomków danej klasy;

public (publiczne) Człony tego typu są widoczne przez wszystkie moduły aplikacji, które widzą deklarację danej klasy;

published (publikowane) Człony tego typu są widoczne przez wszystkie moduły aplikacji, które widzą deklarację danej klasy. Dodatkowo kompilator wydaje i udostępnia szczegółowe informacje o tych członach. Informacje te nazywają się RTTI - Runtime Type Information. Są one dostępne w czasie wykonywania aplikacji, a także wykorzystywane przez inspektora obiektów (Object Inspector);

automated (automatyczne) Człony tego typu są widoczne przez wszystkie moduły aplikacji, które widzą deklarację danej klasy. Dodatkowo kompilator wydaje i udostępnia specjalną informację o tych członach wymaganą przez serwery automatyzacji COM. Klauzula przestarzała, zachowana ze względów kompatybilności.

Brak jawnej klauzuli widoczności Człony zadeklarowane w początkowej części deklaracji klasy, dla których nie podano w sposób jawny klauzuli widoczności są standardowo traktowane jako published, pod dodatkowym warunkiem, że aplikacja jest skompilowana z dyrektywą kompilatora {$M+}. W przeciwnym razie są traktowane jako public.

Pole Pole jest podobne do zmiennej należącej do danego obiektu. Pole może być dowolnego typu, włączając tu także klasę (to znaczy, że klasa może być zagnieżdżona w klasie). Pola mają zazwyczaj przypisaną klauzulę private widoczności. Deklaracje pól muszą poprzedzać deklaracje metod i właściwości.

Przykład deklaracji pola type TNumber = class {klasa TNumber dziedziczy człony od TObject} Int: integer; end;

Pokrywanie pól Pola w Delphi mogą być pokrywane (przysłaniane), to znaczy pole o tej samej nazwie u potomka pokrywa (przysłania) pole przodka.

Przykład pokrywania pól type TAncestor = class {klasa TAncestor dziedziczy człony od TObject} Value: integer; end; TDescendant = class(TAncestor) {klasa TDescendant dziedziczy człony od TAncestor} Value: string; {pole Value pokrywa pole Value klasy TAncestor} var MyObject: TAncestor; {MyObject jest zmienną typu TAncestor} begin MyObject:=TDescendant.Create; {fizyczne utworzenie zmiennej MyObject} MyObject.Value:='Hello'; {błąd} MyObject.Value:=3; {instrukcja poprawna} (MyObject as TDescendant).Value:='Hello'; {instrukcja poprawna}

Komentarz W przykładzie, jakkolwiek MyObject jest realizacją klasy TDescendant, jest jednak deklarowane jako typu TAncestor. W związku z tym kompilator interpretuje MyObject.Value jako typu integer. Oba rodzaje pól istnieją jednak, w związku z dziedziczeniem, w klasie TDescendant, i są osiągalne przez jawne wskazanie - wybór klasy (typecast) operatorem as. Gdyby MyObject został zadeklarowany jako typu TDescendant (var MyObject: TDescendant;), to instrukcja (MyObject.Value:='Hello';) byłaby poprawna w efekcie pokrywania pola.

Metody Wewnątrz deklaracji klasy umieszcza się deklarację metody, to znaczy funkcji lub procedury. Nie jest to jeszcze definicja, to znaczy pełny tekst (ciało) metody. Definicja metody musi zostać przytoczona później. Deklarację klasy wraz z deklaracją metod umieszcza zwykle w części publicznej modułu za słowem kluczowym interface (choć można to zrobić też w części implementacyjnej modułu za słowem kluczowym implementation). Definicje metod muszą być umieszczone wyłącznie w części implementacyjnej modułu.

Przykład interface ............................................. type TMyClass = class ....................................... procedure DoSomething; end; ............................................... implementation procedure TMyClass.DoSomething; begin ...................

Deklaracja metod W deklaracji metody umieszcza się pełny nagłówek metody wraz z listą parametrów formalnych (jeśli metoda ją posiada) i typem zwrotnym (dotyczy funkcji), natomiast w definicji metody wystarczy podać nazwę metody, ale z poprzedzającą nazwą klasy oddzieloną kropką bez listy parametrów. Jeśli jednak listę parametrów formalnych metody i typ zwrotny (dotyczy funkcji) się powtarza, to muszą być one identyczne jak w deklaracji. Deklaracje metod mogą być zaopatrzone w specjalne dyrektywy funkcji lub procedury: reintroduce, overload, binding (w tym: virtual, dynamic, override), calling convention (w tym: register, pascal, cdecl, stdcall, safecall), abstract oraz warning (w tym: platform, deprecated, library). Nazwy wyprowadzone kursywą są to nazwy grup dyrektyw a nie samych dyrektyw (nazwy dyrektyw wyprowadzono boldem).

Dziękuję za uwagę