Wykład 8: Metaklasy. Interfejsy.
|
|
- Aleksander Sikorski
- 5 lat temu
- Przeglądów:
Transkrypt
1 Kurs języka Object/Delphi Pascal na bazie implementacji Free Pascal. autor Łukasz Stafiniak Web: Jeśli zauważysz błędy na slajdach, proszę daj znać! Wykład 8: Metaklasy. Interfejsy. Zliczanie dowiązań. for..in. 1
2 Zagadnienia Dwie myśli przewodnie: Elastyczny polimorfizm. Automatyczne zarządzanie pamięcią. Trzy zagadnienia: Referencje klas (znane też jako metaklasy): typ class of i (elementy RTTI) pole Class. Konstruktory wirtualne. Interfejsy. Zliczanie dowiązań vs. model z właścicielem. Zwalnianie obiektów przez kontenery FPG. Jedno uzupełnienie: Jeszcze raz o składni for..in. 2
3 Referencje klas Pamiętasz metody klas? class procedure/class function Konstruktory też są metodami klas. Metody klasy wywołujemy jakby klasa była obiektem. Okazuje się, że jest! Typem klasy TExample jest: type TExampleClass = class of TExample Jeśli klasa TExample jest sealed, to typ TExampleClass jest jednoelementowy (singleton). Posługując się żargonem design patterns, obiekt TExample możemy nazwać singletonem. Jeśli TX jest podklasą TY, to TXClass jest podtypem TYClass. 3
4 Klasy są więc w Delphi (/Free) Pascalu first-class mamy parametryzację algorytmów i struktur danych typami przy typach generycznych: statycznie, przy referencjach klas: dynamicznie. Przekazywanie klas jako argumentów funkcji czy wartości zmiennych ma dopiero sens, gdy klasy te mają wirtualne metody klas. Tylko wirtualne mogą być inne niż z deklaracji zmiennej. Zastosowania: Wybór implementacji przez użytkownika, pluginy, algorytmy dynamicznie sparametryzowane ze względu na typy danych, abstrakcyjne algorytmy. 4
5 program singleton; uses SysUtils, Classes; type TBase = class class var b: Integer; class function VGetP: Integer; virtual; class procedure VSetP(const I: Integer); virtual; class function GetP: Integer; class procedure SetP(const I: Integer); TBaseClass = class of TBase; TDeriv = class sealed (TBase) class var d: Integer; class function VGetP: Integer; override; class procedure VSetP(const I: Integer); override; TDerivClass = class of TDeriv; 5
6 var MyClass0, MyClass1, MyClass2: TBaseClass; MyClass3: TDerivClass; MyClass0 := TBase; MyClass1 := TDeriv; MyClass2 := TDeriv; MyClass3 := TDeriv; MyClass3.VSetP(8); MyClass0.VSetP(3); MyClass2.VSetP(7); MyClass1.SetP(5); WriteLn ( MyClass0.VGetP=, MyClass0.VGetP, ; MyClass1.GetP=, MyClass1.GetP, ; MyClass2.VGetP=,MyClass2.VGetP, ; MyClass3.VGetP=, MyClass3.VGetP); WriteLn ( TBase.b=, TBase.b, ; TDeriv.d=,TDeriv.d); end. 6
7 unit plugin_form;... procedure TForm1.DeleteCtrlClick(Sender: TObject); var i: Integer; i := ListCtrls.ItemIndex; ListCtrls.Items.Objects[i].Destroy; ListCtrls.Items.Delete(i); procedure TForm1.EditCtrlClick(Sender: TObject); CurrentCtrl := TEdit; 7
8 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var NewCtrl: TControl; CtrlName: String; NewCtrl := CurrentCtrl.Create(self); NewCtrl.Visible := False; NewCtrl.Parent := self; NewCtrl.Left := X; NewCtrl.Top := Y; Inc (Counter); CtrlName := CurrentCtrl.ClassName + IntToStr(Counter); Delete(CtrlName, 1, 1); NewCtrl.Name := CtrlName; NewCtrl.Visible := True; ListCtrls.AddItem(CtrlName, NewCtrl); 8
9 Interfejsy Problemy z hierarchią podtypowania bazującą tylko na dziedziczeniu klas: Dziedziczenie implementacji niszczy enkapsulację (patrz item 16 Effective Java slajd 16 java-lecture11.pdf). Jednokrotne dziedziczenie nie można zdefiniować nowej klasy by pełniła wiele wcześniej zdefiniowanych ról. Słaba separacja specyfikacji i implementacji: część prywatna klasy musi być w interfejsie modułu, implementacja klasy musi być dostępna do skompilowania jej użycia. Interfejs to zbiór sygnatur (nagłówków) metod definiujący nowy typ. Obiekty tego typu pochodzą z klas implementujących interfejs: muszą mieć publicznie wszystkie metody z interfejsu. 9
10 Zalety interfejsów w Delphi(/Free) Pascalu: Mniejsza zależność między modułami, Jedna klasa może implementować wiele interfejsów-zachowań, które w Delphi(/Free) Pascalu mogą nawet mieć metody o tych samych nazwach, a różnych implementacjach w jednej klasie! Klasa może agregować zachowania, delegując do osobno zdefiniowanych klas implementację wybranych interfejsów w Delphi(/Free) Pascalu bez żadnego nadmiarowego kodu. Można opublikować interfejs rozprowadzając kod jedynie w postaci skompilowanej. Interfejsy mogą tworzyć hierarchię z wielodziedziczeniem. 10
11 Wady interfejsów w Delphi(/Free) Pascalu: W języku domyślnie interfejsy związane są ze zliczaniem dowiązań chociaż to zupełnie różne sprawy (cierpią i interfejsy i zliczanie dowiązań), Niezależność kompilacji tylko gdy trzymamy interfejsy w osobnych modułach niż (implementujące je) klasy. Pamiętaj by nie rozdmuchać nadmiernie architektury programów. Interfejsy są mniej popularne niż w Javie, częściowo przez popularność referencji klas. 11
12 program multi_intf; uses SysUtils, Classes; {$interfaces CORBA} type IBase = interface function ShowBase: String; IA = interface (IBase) function Show: String; IB = interface (IBase) function Show: String; 12
13 TMulti = class (IA, IB) function Show: String; function ShowBase: String; function ShowA: String; function ShowB: String; function IA.Show = ShowA; function IB.ShowBase = ShowB; function TMulti.Show: String; Show := TMulti.Show ; function TMulti.ShowBase: String; ShowBase := TMulti.ShowBase ; function TMulti.ShowA: String; ShowA := TMulti.ShowA ; function TMulti.ShowB: String; ShowB := TMulti.ShowB ; 13
14 var Multi: TMulti; Base: IBase; A: IA; B: IB; Multi := TMulti.Create; //Base := Multi; A := Multi; B := Multi; WriteLn ( A.ShowBase=, A.ShowBase, ; B.ShowBase=, B.ShowBase); WriteLn ( A.Show=, A.Show, ; B.Show=, B.Show); Multi.Free; end. 14
15 program no_counting; uses SysUtils, Classes; type IBasic = interface function Show: String; TNoCount = class (IBasic) function Show: String; function QueryInterface(constref IID:TGUID; out Obj) :LongInt; CDecl; function _AddRef:LongInt; CDecl; function _Release:LongInt; CDecl; function TNoCount.Show: String; Show := TNoCount.Show ; 15
16 function TNoCount.QueryInterface (constref IID:TGUID; out Obj):LongInt; CDecl; if GetInterface(IID, Obj) then Result := 0 function TNoCount._AddRef:LongInt; CDecl; Result := -1 function TNoCount._Release:LongInt; CDecl; Result := -1 16
17 var Basic: IBasic; NoCount: TNoCount; NoCount := TNoCount.Create; Basic := NoCount; WriteLn ( Basic.Show=, Basic.Show, ; NoCount.Show=, NoCount.Show); Basic := nil; NoCount.Destroy; end. 17
18 Zliczanie dowiązań O ile nie używamy {$interfaces CORBA}, zmienne, pola i parametry typu interfejsowego będą objęte tzw. zliczaniem dowiązań. Jest to mechanizm zarządzania pamięcią przejmujący od programisty obowiązek niszczenia obiektów (do których odnoszą się zmienne i pola typu interfejsowego). Inny mechanizm zarządzania pamięcią w Delphi/Free Pascalu to model z właścicielem (ownership): właściciel obiektu jest odpowiedzialny za jego destrukcję. Jest realizowny m.in. przez klasy pochodne z TComponent. Ponieważ komponenty korzystają z interfejsów dla zwiększenia polimorfizmu, TComponent implementuje metody obsługi zliczania dowiązań tak by one nic nie robiły. Zupełnie jak w przykładzie no_counting powyżej. Ostrożnie przy mieszaniu zmiennych typu klasy i zmiennych typu interfejsowego do przechowywania tych samych obiektów gdy zniknie ostatnia referencja poprzez typ interfejsowy, obiekt zostanie zniszczony, i możemy zostać z wiszącą (dangling) referencją w zmiennej typu klasy. 18
19 program bad_counting; uses SysUtils, Classes; type IBasic = interface function Show: String; TBadCount = class (TInterfacedObject, IBasic) function Show: String; function TBadCount.Show: String; Show := TBadCount.Show ; 19
20 var Basic: IBasic; BadCount: TBadCount; BadCount := TBadCount.Create; Basic := BadCount; WriteLn ( Basic.Show=, Basic.Show, ; BadCount.Show=, BadCount.Show); Basic := nil; BadCount.Destroy; end. Rozpoczęcie zliczania dowiązań dla BadCount. Znika jedyna referencja do BadCount więc obiekt zniszczony. Ups wiszący wskaźnik, naruszenie pamięci. 20
21 program interfaces_ref_counting; uses Classes; var C: TComponent; IO: TInterfacedObject; I: IInterface; C := TComponent.Create(nil); C := TComponent.Create(nil); I := C; I := TComponent.Create(nil); IO := TInterfacedObject.Create; IO := TInterfacedObject.Create; I := IO; I := TInterfacedObject.Create; end. Wyciek pamięci: brak zliczania dowiązań. Wycieki pamięci: co prawda wywołane zliczanie, ale nic nie robi, bo (tu też) TComponent je ignoruje. Wyciek pamięci bo zmienna nie jest interfejsowa. Brak wycieku, bo tutaj startujemy ze zliczaniem dowiązań. Preferowany sposób: brak możliwości pozostania z wiszącą referencją. 21
22 program ref_lifespan; type TClass = class (TObject, IInterface)... var GO: TClass; GI: IInterface; procedure LocalProc(Arg: IInterface); var LO: TClass; LI: IInterface; WriteLn ( Entered LocalProc ); Write( LO := TClass.Create; ); LO := TClass.Create( Local A ); Write( LI := LO; ); LI := LO; //raise Exception.Create( test exit ); //Exit; //Halt; Write( LI := GO; ); LI := GO; Write( GI := TClass.Create; ); GI := TClass.Create( Local B ); WriteLn ( Leaving LocalProc ); WriteLn ( Entered main program ); Write( GO := TClass.Create; ); GO := TClass.Create( Global A ); Write( GI := GO; ); GI := GO; LocalProc(TClass.Create ( Global B )); WriteLn ( Leaving main program ); end. 22
23 Entered main program GO := TClass.Create; Creating Global A GI := GO; Reference Global A increase to 1 Creating Global B Reference Global B increase to 1 Entered LocalProc LO := TClass.Create; Creating Local A LI := LO; Reference Local A increase to 1 LI := GO; Reference Global A increase to 2 Reference Local A decrease to 0 Destroying Local A GI := TClass.Create; Creating Local B Reference Local B increase to 1 Reference Global A decrease to 1 Leaving LocalProc Reference Global A decrease to 0 Destroying Global A Reference Global B decrease to 0 Destroying Global B Leaving main program Reference Local B decrease to 0 Destroying Local B Heap dump by heaptrc unit 4 memory blocks allocated : 64/64 4 memory blocks freed : 64/64 0 unfreed memory blocks : 0 23
24 Po odkomentowaniu raise Exception.Create( test exit ); zwróć uwagę że wszystkie obiekty TClass są zwolnione: Entered main program GO := TClass.Create; Creating Global A GI := GO; Reference Global A increase to 1 Creating Global B Reference Global B increase to 1 Entered LocalProc LO := TClass.Create; Creating Local A LI := LO; Reference Local A increase to 1 Reference Local A decrease to 0 Destroying Local A Reference Global B decrease to 0 Destroying Global B An unhandled exception occurred at $080485BC : Exception : test exit $080485BC LOCALPROC,... Reference Global A decrease to 0 Destroying Global A Heap dump by heaptrc unit 14 memory blocks allocated : 1165/ memory blocks freed : 1065/ unfreed memory blocks :
25 Po odkomentowaniu Exit;: Entered main program GO := TClass.Create; Creating Global A GI := GO; Reference Global A increase to 1 Creating Global B Reference Global B increase to 1 Entered LocalProc LO := TClass.Create; Creating Local A LI := LO; Reference Local A increase to 1 Reference Local A decrease to 0 Destroying Local A Reference Global B decrease to 0 Destroying Global B Leaving main program Reference Global A decrease to 0 Destroying Global A Heap dump by heaptrc unit 9 memory blocks allocated : 1017/ memory blocks freed : 1017/ unfreed memory blocks : 0 25
26 Po zamianie Exit; na Halt;: Entered main program GO := TClass.Create; Creating Global A GI := GO; Reference Global A increase to 1 Creating Global B Reference Global B increase to 1 Entered LocalProc LO := TClass.Create; Creating Local A LI := LO; Reference Local A increase to 1 Reference Global A decrease to 0 Destroying Global A Heap dump by heaptrc unit 9 memory blocks allocated : 1017/ memory blocks freed : 985/992 2 unfreed memory blocks : 32 26
27 Cykle i słabe referencje Jak widzieliśmy powyżej, zliczanie dowiązań jest w miarę niezawodne: jeśli procedura ma parametr lub zmienną lokalną typu interfejsowego, kompilator umieści jej kod w klauzuli try..finally żeby zawsze przy jej opuszczaniu dekrementować referencje znajdujące się w jej ramce stosu. Dodatkowa klauzula try może trochę pogorszyć wydajność. Ale zliczanie dowiązań nie zwolni obiektów jeśli tworzą one cykl. Gdy musimy mieć dane z cyklicznymi odwołaniami, i zależy nam na zarządzaniu pamięcią przez interfejsy-zliczanie dowiązań, to któreś z referencji trzeba przeciąć, np. przez zrzutowanie na wskaźnik uniwersalny Pointer albo przez referencję po oryginalnej klasie obiektu: byle nie mieć referencji po interfejsie. 27
28 Zarządzanie pamięcią w FGL TFPGObjectList zwalnia obiekty, o ile parametr FreeObjects dla konstruktora jest true (więc nie jest to konieczny mechanizm). Zwalnia nie tylko przy niszczeniu listy, także przy usuwaniu elementów z listy przez Remove, przez Clear etc. TFPGObjectList jest w pełni odpowiedzialne za zarządzanie pamięcią elementów. Jako ucieczka, zawsze można wyjąć element z listy przez Extract. TFPGInterfacedObjectList wydaje się zbędne: ma zakodowane wywoływanie _Add i _Release, ale ponieważ TFPGList posługuje się zwykłymi przypisywaniami, to kompilator automatycznie wrzuci te wywołania jeśli będziemy przechowywać listę interfejsów w liście. 28
29 Jeszcze raz o składni for..in Szczegóły i przykłady: patrz By korzystać ze składni for..in wystarczy by klasa kontenera implementowała metodę GetEnumerator, zwracającą obiekt-iterator mający metodę MoveNext przesuwającą iterator na następny element lub zwracającą False jeśli się nie da, oraz właściwość (tylko do odczytu) Current zwracającą aktualny element. Zawsze twórz obiekt-iterator jednorazowego użytku, bo będzie zwolniony po użyciu. Nie zwracaj kontenera jako iteratora! Iterować można po dowolnym obiekcie posiadającym GetEnumerator, więc możesz zaimplementować metody zwracające różne strategie enumeracji, najprościej jako iteratory posiadające dodatkowo GetEnumerator zwracającą self. Dla elegancji, kontener może implementować interfejs IEnumerable, i odpowiednio iterator interfejs IEnumerator. Możesz dorzucić składnię for..in do istniejącego typu przeciążając operator Enumerator. 29
Wykład 6: Dziedziczenie.
Kurs języka Object/Delphi Pascal na bazie implementacji Free Pascal. autor Łukasz Stafiniak Email: lukstafi@gmail.com, lukstafi@ii.uni.wroc.pl Web: www.ii.uni.wroc.pl/~lukstafi Jeśli zauważysz błędy na
Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:
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
Programowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.
Programowanie obiektowe
Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne.
Programowanie obiektowe
Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do
Programowanie obiektowe
Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami
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ść,
Zapis programu z wykorzystaniem modułu (Podstawy Delphi 2.1, 2.2, 2.3 str11 )
Przypomnienie dziedziczenie obiektów Przykład (p6) Zapis programu z wykorzystaniem modułu (Podstawy Delphi 2.1, 2.2, 2.3 str11 ) Przykład (p7) przypomnienie zapis z wykorzystaniem rekordu W pliku projektu
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
Wykład 9: Polimorfizm i klasy wirtualne
Programowanie obiektowe Wykład 9: i klasy wirtualne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Programowanie obiektowe i metody wirtualne 2 W programowaniu obiektowym polimorfizm
Programowanie obiektowe
Programowanie obiektowe Wykład 4 Marcin Młotkowski 15 marca 2018 Plan wykładu 1 2 3 Klasa podstawowa Własne kolekcje Obiekty i wartości Marcin Młotkowski Programowanie obiektowe 141 / 224 Z czego składa
Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie
Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac
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
Wykład 1: Przegląd języka
Kurs języka Object/Delphi Pascal na bazie implementacji Free Pascal. autor Łukasz Stafiniak Email: lukstafi@gmail.com, lukstafi@ii.uni.wroc.pl Web: www.ii.uni.wroc.pl/~lukstafi Jeśli zauważysz błędy na
Lista, Stos, Kolejka, Tablica Asocjacyjna
Lista, Stos, Kolejka, Tablica Asocjacyjna Listy Lista zbiór elementów tego samego typu może dynamicznie zmieniać rozmiar, pozwala na dostęp do poszczególnych elementów Typowo dwie implementacje: tablicowa,
Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/
Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i
Podstawy Programowania semestr drugi. Wykład czternasty
Wykład czternasty 1. Polimorfizm Ostatni wykład zakończyliśmy stwierdzeniem, że możemy obiektowi dowolnej klasy przypisa ć obiekt klasy dziedziczącej po tej klasie. Przypisanie takie obejmuje jednak jedynie
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
Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.
Zadanie: Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób. Na kolejnych zajęciach projekt będzie rozwijana i uzupełniana o kolejne elementy omawiane
Java Język programowania
Java Język programowania Język Java Bazuje i jest zbliżony do C/C++ Porosty zbiór typów danych (podział na typy prymitywne i obiektowe) Zarządzanie pamięcią i Garbage Collection Zintegrowana synchronizacja
Programowanie obiektowe - 1.
Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która
Wykład 7: Lazarus GUI
Kurs języka Object/Delphi Pascal na bazie implementacji Free Pascal. autor Łukasz Stafiniak Email: lukstafi@gmail.com, lukstafi@ii.uni.wroc.pl Web: www.ii.uni.wroc.pl/~lukstafi Jeśli zauważysz błędy na
Polimorfizm. dr Jarosław Skaruz
Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody
Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14
Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;
Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017
Wykład 13 14 czerwiec 2017 Java vs cpp - podobieństwa Podobny sposób definiowania klas. Występowanie typów podstawowych: boolean, char, byte, short, int, long, float, double. Podobna zasada definiowania
Zaawansowane programowanie w C++ (PCP)
Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18 Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie
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
PODSTAWY PROGRAMOWANIA
PODSTAWY PROGRAMOWANIA Andrzej Marciniak Prezentacja multimedialna przygotowana za pomocą systemu Corel Presentations X3 Copyright 2003-2017 by Andrzej Marciniak PP-8(1 z 78) Na poprzednim wykładzie...
Dziedziczenie. dr Jarosław Skaruz
Dziedziczenie dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com Dziedziczenie specjalizacja Dziedziczenie generalizacja Generalizacja-specjalizacja jest takim związkiem pomiędzy klasami,
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
Zaawansowane programowanie w C++ (PCP)
Zaawansowane programowanie w C++ (PCP) Wykład 3 - polimorfizm. dr inż. Robert Nowak - p. 1/14 Powtórzenie Powtórzenie: klasy autonomiczne: konstruktor, konstruktor kopiujacy, operator przypisania, destruktor
Polimorfizm, metody wirtualne i klasy abstrakcyjne
Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,
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{
W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :
Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych kolekcji. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych
Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
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
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
Programowanie obiektowe w VB cz 2
Programowanie obiektowe w VB cz 2 Interfejsy Interfejsy są listą metod, właściwości, zdarzeń i indeksowników. Jeśli jakaś klasa implementuje jakiś interfejs, znaczy to, że użytkownik tej klasy może skorzystać
Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016
Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal
Języki i techniki programowania Ćwiczenia 2
Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...
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
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
Interfejsy i klasy wewnętrzne
Interfejsy i klasy wewnętrzne mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Interfejs klasy sposób komunikacji z jej obiektami (zestaw składowych publicznych). Określa on zestaw
Java: interfejsy i klasy wewnętrzne
Java: interfejsy i klasy wewnętrzne Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 INTERFEJSY Interfejs to opis co klasa implementująca dany interfejs powinna robić, ale bez określania
Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych
Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych mluckner@mini.pw.edu.pl http://www.mini.pw.edu.pl/~lucknerm Programy w Javie składają się z pakietów Pakiety zawierają definicje
Dziedziczenie jednobazowe, poliformizm
Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie jednobazowe 2. Polimorfizm część pierwsza 3. Polimorfizm część druga Zofia Kruczkiewicz, ETE8305_6 1 Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie
Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór
Klasy generyczne Klasy generyczne Klasy generyczne są to klasy o parametryzowanych typach danych. Klasy generyczne posiadają kompletną implementację, jednak nie definiują typów danych wykorzystanych w
Języki i techniki programowania Ćwiczenia 3 Dziedziczenie
Języki i techniki programowania Ćwiczenia 3 Dziedziczenie Klasa abstrakcyjna Autor: Marcin Orchel Klasa abstrakcyjna to taka, że nie możemy tworzyć obiektów tej klasy, możemy jednak dziedziczyć po tej
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,
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;
UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.
UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami
java.util.* :Kolekcje Tomasz Borzyszkowski
java.util.* :Kolekcje Tomasz Borzyszkowski Wstęp Kolekcje w Java dają programiście pewien standardowy sposób radzenia sobie z przetwarzaniem grup obiektów. Implementacja kolekcji w Java składa się z następujących
Klasy abstrakcyjne, interfejsy i polimorfizm
Programowanie obiektowe 12 kwietnia 2011 Organizacyjne Klasówka będzie 20 IV 2011. Sale jeszcze są pertraktowane. Materiał do wyjątków włącznie. Można mieć swoje materiały nieelektroniczne. Wywołanie z
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
1. Programowanie obiektowe. Wstęp.
1. Programowanie obiektowe. Wstęp. Literatura: Neil J. Rubenking, Understending and Programming in Object-Oriented-Pascal, PC Magazine, February 27, 1990, p. 263. Turbo Pascal w wersji 5.5 i wyższych dopuszcza
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass
Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.
Podstawy programowania Wykład PASCAL Wstęp do programowania obiektowego 1 Programowanie obiektowe - definicja Programowanie obiektowe paradygmat programowania, w którym programy definiuje się za pomocą
1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!
Temat: Klasy typu sealed. Klasy abstrakcyjne. Deklaracja i implementacja interfejsu. Typ Object i operatory is oraz as. Czas ycia obiektu. Destruktory. 1. Klasa typu sealed Przykład 1 Klasa typu sealed
Tworzenie własnych komponentów
Tworzenie własnych komponentów 1. Tworzenie nowego komponentu W tym celu należy wykorzystać menu Component. Interesujące są dwie opcje menu New Component i Install Component. Pierwsze polecenie służy do
Programowanie RAD Delphi
Programowanie RAD Delphi Dr Sławomir Orłowski Zespół Fizyki Medycznej, Instytut Fizyki, Uniwersytet Mikołaja Kopernika w Toruniu Pokój: 202, tel. 611-32-46, e-mial: bigman@fizyka.umk.pl Delphi zasoby Aplikacje
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.
Wykład 5 Okna MDI i SDI, dziedziczenie
Wykład 5 Okna MDI i SDI, dziedziczenie Autor: Zofia Kruczkiewicz Zagadnienia 1. Aplikacja wielookienkowa. Zakładanie projektu typu CLR Windows Forms 1.1. Aplikacja typu MDI 1.2. Aplikacja typu SDI 2. Dziedziczenie
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
Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.
Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class
Dokumentacja do API Javy.
Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu
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
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ń
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
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
Programowanie obiektowe i zdarzeniowe
Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/23 Programowanie obiektowe i zdarzeniowe wykład 6 polimorfizm Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie
STL Standardt Template Library (wprowadzenie)
STL Standardt Template Library (wprowadzenie) Biblioteka standardowych szablonów na dzień dzisiejszy stanowi jedną z najpotężniejszych możliwości języka C++ Zawiera szablony klas ogólnego przeznaczenia
Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13
Klasy Klasa to grupa obiektów, które mają wspólne właściwości, a obiekt jest instancją klasy. Klasa w języku Java może zawierać: pola - reprezentują stan obiektu (odniesienie do pola z kropką), methods
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
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ą
DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0
Uwaga: DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0 1. Zostały pominięte diagramy: CYFRA, CYFRA SZESNASTKOWA, ZNAK i LITERA. Nie została uwzględniona możliwość posługiwania się komentarzami. 2. Brakuje
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
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass
1 Atrybuty i metody klasowe
1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Refleksja Typy anonimowe Wyrażenia lambda Extension methods *LINQ Java jest językiem dynamicznym
Spis treści. Wprowadzenie 15
Spis treści Wprowadzenie 15 1. Mechanizmy języka C++ 19 1.1. Struktura programu jednostki translacji.................. 21 1.1.1. Składnia tekstu źródłowego...................... 22 1.1.2. Preprocesor...
Programowanie obiektowe
Programowanie obiektowe Laboratorium 3 i 4 - przypomnienie wiadomości o OOP na przykładzie Javy mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 8 marca 2017 1 / 20 mgr inż. Krzysztof Szwarc
Wywoływanie metod zdalnych
Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia
Programowanie modułowe
Przykład aplikacji bez obsługi zdarzeń Rozmieszczenie na formatce 11 etykiet i komponentu Image. Rozbudowa pliku głównego aplikacji do postaci: program Project1; uses Forms, SysUtils, Unit1 in 'Unit1.pas'
.NET Klasy, obiekty. ciąg dalszy
.NET Klasy, obiekty ciąg dalszy Przeciążanie operatorów 1 W języku C# istnieje możliwość zdefiniowania funkcjonalności dużej części operatorów dla typów stworzonych przez użytkownika. Dzięki takiemu zabiegowi,
Programowanie obiektowe w języku
Programowanie obiektowe w języku C++ Stanisław Gepner sgepner@meil.pw.edu.pl Dziedziczenie Wstęp Zacznijmy od przykładu Przykład rolniczy Każde zwierzątko wydaje dźwięk Każde się tak samo porusza Musimy
Projektowanie obiektowe. Roman Simiński Polimorfizm
Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Polimorfizm Koncepcja polimorfizmu Słowo polimorfizm pochodzi od dwóch greckich słów: poly czyli wiele, morphos czyli
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne
Materiały do zajęć VII
Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja
Wykład 9: Metody wirtualne i polimorfizm
Języki programowania C i C++ Wykład 9: Metody wirtualne i polimorfizm 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD Podstawy programowania w C++ 2 to funkcje składowe, które przydają się szczególnie,
Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.
.NET Klasy, obiekty Klasa i obiekt Każdy obiektowy język programowania daje programiście możliwość tworzenia nowych typów danych. Nowy typ danych definiuje się poprzez zdefiniowanie klasy. Co to jest klasa?
JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.
JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod
Programowanie w Internecie. Java
Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java
Typy sparametryzowane
Typy sparametryzowane Streszczenie Celem wykładu jest zaprezentowanie typów sparametryzowanych. Czas wykładu 90 minut. Istnieją algorytmy, których zasada działania nie zależy od typu danych wejściowych.
Referencje do zmiennych i obiektów
Referencje do zmiennych i obiektów Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.
Nazwa implementacji: Gra w życie Autor: Piotr Fiorek Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach. Zaprojektuj prostą grę, której celem
Materiały do laboratorium MS ACCESS BASIC
Materiały do laboratorium MS ACCESS BASIC Opracowała: Katarzyna Harężlak Access Basic jest językiem programowania wykorzystywanym w celu powiązania obiektów aplikacji w jeden spójny system. PROCEDURY I