PODSTAWY PROGRAMOWANIA

Wielkość: px
Rozpocząć pokaz od strony:

Download "PODSTAWY PROGRAMOWANIA"

Transkrypt

1 PODSTAWY PROGRAMOWANIA Andrzej Marciniak Prezentacja multimedialna przygotowana za pomocą systemu Corel Presentations X3 Copyright by Andrzej Marciniak PP-5(1 z 93)

2 Na poprzednim wykładzie... Ptypy danych i ich opis < definiowanie typów < typy proste (porządkowe, rzeczywiste) < typy łańcuchowe < typy strukturalne (tablicowe, rekordowe, zbiorowe, plikowe) PP-5(2 z 93)

3 Na tym wykładzie... Ptypy danych i ich opis (cd.) < typy opisujące obiekty < typy wskaźnikowe < typy proceduralne < typy wariantowe < zagnieżdżone definicje typów < zgodność typów PP-5(3 z 93)

4 Na tym wykładzie Pzmienne oraz literały stałe i zmienne < deklaracje zmiennych < zmienne ideksowane < zmienne rekordowe < zmienne obiektowe < zmienne dynamiczne < zmienne proceduralne < zmienne wariantowe < zmienne wątkowe < zmienne z początkową wartością < nakładanie zmiennych < literały stałe i zmienne PP-5(4 z 93)

5 Typy opisujące obiekty Podstawowymi typami, na których opiera się programowanie zorientowane obiektowo w języku Delphi, są typy klasowe. Każdy typ klasowy jest modelem struktury o stałej liczbie elementów i określa dane oraz czynności dla wszystkich obiektów, które zostaną na jego podstawie utworzone. Typ klasowy (lub krótko: klasa) definiuje zatem jak zbudować obiekt i jakie będą jego cechy. PP-5(5 z 93)

6 Typy opisujące obiekty Obiekt powstaje podczas wykonywania programu i żyje w jego aktywnej pamięci. Ponieważ po utworzeniu obiekt nie odwołuje się więcej do klasy, na podstawie której został zbudowany, więc jakiekolwiek zmiany poczynione na nim podczas wykonywania programu nie mają wpływu na inne obiekty, które powstały na podstawie tej samej klasy. PP-5(6 z 93)

7 Typy opisujące obiekty Zmienna typu klasowego nie zawiera obiektu jako takiego, ale jest wskaźnikiem do bloku pamięci, który został przydzielony dla obiektu. Wartość nil takiej zmiennej oznacza, że aktualnie nie jest ona odwołaniem do obiektu. Obiekty są tworzone i usuwane z pamięci za pomocą specjalnych procedur zwanych odpowiednio konstruktorami i destruktorami (będzie dalej). PP-5(7 z 93)

8 Typy opisujące obiekty Typy klasowe Klasa jest strukturą składającą się ze stałej liczby elementów, którymi mogą być: P pola (podobnie jak w rekordzie), P metody (m. in. procedury lub funkcje), P własności (łącza do danych, przechowywanych zwykle w polach, przy odczytywaniu i zapisywaniu których można wykonywać określone operacje). PP-5(8 z 93)

9 Typy opisujące obiekty Typy klasowe Definicja pojedynczego typu klasowego ma postać abstract type identyfikator-typu = class [(przodek)] sealed lista-elementów-klasy end; Przodek (element opcjonalny) oznacza identyfikator innego, zdefiniowanego wcześniej typu klasowego. Typem klasowym pierwotnym jest typ TObject predefiniowany w module System. PP-5(9 z 93)

10 Typy opisujące obiekty Typy klasowe Użycie dyrektywy języka sealed oznacza, że definiowana klasa nie może być rozszerzona poprzez dziedziczenie (nie może mieć potomków). Dyrektywa języka abstract oznacza klasę abstrakcyjną, czyli klasę będącą pewną podstawą (wzorem) dla klas potomnych. Dla klas abstrakcyjnych nie powinny być tworzone obiekty. PP-5(10 z 93)

11 Typy opisujące obiekty Typy klasowe Lista elementów klasy składa się z deklaracji pól, metod i własności. Deklaracje pól muszą przy tym poprzedzać deklaracje metod i własności. Każda z deklaracji pól ma postać lista-nazw-pól : opis-typu; lub var lista-nazw-pól : opis-typu; i spełnia tę samą rolę, co w definicji typu rekordowego, tzn. określa pola służące do przechowywania danych. PP-5(11 z 93)

12 Typy opisujące obiekty Typy klasowe W definicji typu klasowego mogą też występować tzw. pola klasowe, które także służą do przechowywania danych, ale w przeciwieństwie do zwykłych pól mogą być dostępne nie tylko po utworzeniu obiektu, ale także poprzez odwołanie do klasy. Deklaracje pól klasowych rozpoczynają się od słów kluczowych class var po których może występować dowolna liczba konstrukcji lista-nazw-pól : opis-typu; Kiedy takie deklaracje kończą się? PP-5(12 z 93)

13 Typy opisujące obiekty Typy klasowe Przykład Po definicji type moja_klasa = class class var pole1 : AnsiChar; var pole2 : Integer; end; do pola klasowego pole1 można odwołać się np. za pomocą instrukcji moja_klasa.pole1:= a ; a do pola pole2 dopiero po utworzeniu obiektu, czyli np. var mój_obiekt : moja_klasa;... wywołanie konstruktora mój_obiekt.pole2:=1; PP-5(13 z 93)

14 Typy opisujące obiekty Typy klasowe Postać każdej deklaracja metody jest następująca: nagłówek-metody; lub nagłówek-metody; dyrektywy-metody; gdzie nagłówek metody oznacza nagłówek funkcji, procedury, konstruktora lub destruktora (będzie dalej), a dyrektywy metody oznaczają rodzaj metody i konwencję wywołania (też będzie dalej). PP-5(14 z 93)

15 Typy opisujące obiekty Typy klasowe Deklaracje metod w typie klasowym są tylko zapowiedziami definicji metod, które występują po (niekoniecznie bezpośrednio) definicji typu klasowego w tej samej jednostce programowej (programie, module lub bibliotece łączonej dynamicznie), przy czym w przypadku definicji typu klasowego w części opisowej modułu definicje zadeklarowanych w typie klasowym metod występują w jego części implementacyjnej. PP-5(15 z 93)

16 Typy opisujące obiekty Typy klasowe Własności określają atrybuty obiektu danej klasy oraz operacje skojarzone z ich odczytem i zapisem. Każda deklaracja własności ma postać property nazwa-własności łącze-własności specyfikatory-własności; gdzie łącze własności służy m. in. do określenia typu własności, a specyfikatory własności sterują m. in. dostępem do wartości własności, tj. określają operacje skojarzone z odczytem lub zapisem. PP-5(16 z 93)

17 Typy opisujące obiekty Typy klasowe Każdy element lub grupa elementów występująca w liście elementów klasy może być poprzedzona specyfikatorem dostępności, który określa, gdzie dany element lub grupa elementów są dostępne. Istnieje siedem wzajemnie wykluczających się specyfikatorów dostępności: published, public, protected, strict protected, private, strict private i automated. Ich użycie wymaga podania samego słowa (słów), bez kończącego średnika. PP-5(17 z 93)

18 Typy opisujące obiekty Typy klasowe Dla elementów listy elementów klasy, które występują bezpośrednio po nagłówku definicji klasy, a które nie są poprzedzone żadnym z podanych słów, przyjmuje się, że ich specyfikatorem dostępności jest published, gdy dany typ klasowy został skompilowany w stanie {$M+} (inne oznaczenie: {$TYPEINFO ON}; domyślnie dyrektywa jest wyłączona) lub jest potomkiem typu skompilowanego w tym stanie oraz public w przeciwnym przypadku. PP-5(18 z 93)

19 Typy opisujące obiekty Typy klasowe Elementy, dla których obowiązuje specyfikator public, nie mają żadnych ograniczeń dostępności. Jedyna różnica dla sekcji published, w stosunku do sekcji public, polega na tym, że dla pól, własności i metod są generowane informacje o typach obowiązujących podczas wykonywania programu. Informacje te są wykorzystywane m. in. przez środowisko Delphi do wyświetlania własności w okienku Object Inspector oraz do dostępu do metod PP-5(19 z 93) obsługujących zdarzenia.

20 Typy opisujące obiekty Typy klasowe W definicji typu klasowego sekcje published mogą wystąpić tylko w przypadku, gdy typ został skompilowany w stanie {$M+} lub jest potomkiem typu skompilowanego w tym stanie. W bibliotece VCL w stanie {$M+} został skompilowany typ System.Classes.TPersistent. Ponieważ typy TComponent, TControl, TGraphicControl i TWinControl są jego potomkami, a z kolei komponenty widoczne i niewidoczne są zdefiniowane jako klasy potomne wymienionych typów, nietrudno zgadnąć, dlaczego podczas projektowania programu okienkowego własności komponentów są PP-5(20 z 93) wyświetlane w okienku Object Inspector.

21 Typy opisujące obiekty Typy klasowe Specyfikator automated pozostawiono w bieżącej wersji języka Delphi tylko dla zachowania zgodności z wersją 2.0 języka Object Pascal. W wersji tej specyfikator ten powodował generowanie informacji o tzw. typach automatyzacyjnych dla metod i własności, które umożliwiały tworzenie serwerów automatyzacji OLE. W programach tworzonych od podstaw od wersji 5 języka Delphi (Object) Pascal zaleca się wykorzystywać typ klasowy TAutoObject zdefiniowany w module System.Win.ComObj, który umożliwia tworzenie serwerów automatyzacji typu ActiveX i w którym nie używa się sekcji automated. PP-5(21 z 93)

22 Typy opisujące obiekty Typy klasowe Elementy wyszczególnione w sekcji protected są dostępne tylko w ramach danej klasy i klas z niej wyprowadzonych w bieżącym module. Użycie dodatkowo słowa strict, czyli specyfikatora strict protected, ogranicza dostępność elementów do klasy, w której zostały zadeklarowane i do klas potomnych (bez względu na to, gdzie te klasy zostały zdefiniowane). PP-5(22 z 93)

23 Typy opisujące obiekty Typy klasowe Elementy zdefiniowane w sekcji private są dostępne tylko w bieżącym module, ale nie tylko w ramach danej klasy i jej potomków. Zatem elementy te mają wszystkie cechy elementów, dla których obowiązuje specyfikator public, tyle że poza bieżącym modułem są one ukryte. Dodatkowe wyspecyfikowanie słowa strict, czyli użycie specyfikatora strict private, ogranicza dostępność takich elementów do klasy, w której zostały zadeklarowane. PP-5(23 z 93)

24 Typy opisujące obiekty Typy klasowe Definicje typów klasowych mogą zawierać samo słowo class i nic więcej, tzn. mieć postać type identyfiktor-typu = class; Konstrukcja taka jest zapowiedzią definicji typu klasowego i pozwala na definiowanie typów klasowych wzajemnie zależnych (w definicji jednego typu następuje odwołanie do drugiego i na odwrót). Właściwa definicja typu klasowego musi jednak wystąpić w tej samej części opisowej. PP-5(24 z 93)

25 Typy opisujące obiekty Typy klasowe Przykłady type klasa = class (TObject) pole1 : Integer; pole2 : array [1..20] of string; procedure metoda1 (parametr1 : Word; parametr2 : string); function metoda2 (parametr : Integer) : Boolean; end; PP-5(25 z 93)

26 Typy opisujące obiekty Typy klasowe Przykłady type nowa_klasa = class (klasa) pole : Boolean; constructor wpisz (wartosc_pola : Boolean); procedure metoda1 (parametr : Longint); function nowa_metoda (a : Word) : ShortString; virtual; end; Typ nowa_klasa jest potomkiem typu klasa z poprzedniego przykładu. PP-5(26 z 93)

27 Typy opisujące obiekty Typy klasowe Przykłady type następna_klasa = class (nowa_klasa) function nowa_metoda (a : Word) : ShortString; override; end; Metoda wirtualna nowa_metoda przesłania metodę wirtualną o takiej samej nazwie z typu nadrzędnego nowa_klasa, zdefiniowanego w poprzednim przykładzie. PP-5(27 z 93)

28 Typy opisujące obiekty Typy klasowe Przykłady type karta = class procedure ustal (wartość : Byte); function nazwa : string; private nominał : Byte end; Metody są ogólnie dostępne, ale pole nominał będzie dostępne tylko w bieżącym module. PP-5(28 z 93)

29 Typy opisujące obiekty Typy klasowe Przykłady Kolejność sekcji public i private jest dowolna, zatem równoważną definicją byłaby definicja postaci type karta = class private nominał : Byte; public procedure ustal (wartość : Byte); function nazwa : string; end; PP-5(29 z 93)

30 Typy opisujące obiekty Odwołania do klas W przypadku zwykłych typów klasowych operacje są wykonywane na obiektach, tj. zmiennych danych typów klasowych. Typy odwołań do klas umożliwiają wykonywanie pewnych operacji bezpośrednio na klasach i są niekiedy nazywane metaklasami. Definicja pojedynczego typu odwołania do klasy ma postać type identyfikator-typu = class of identyfikator-typu- klasowego; PP-5(30 z 93)

31 Typy opisujące obiekty Odwołania do klas Identyfikator podany po słowach class of jest traktowany jako wartość typu podanego w definicji. Zmienna typu odwołania do klasy może przyjąć tę wartość (odwołać się do niej) lub wartości określające dowolnego potomka danej klasy. Zmienna taka może również przyjąć wartość nil, co oznacza, że aktualnie nie odwołuje się ona do żadnej klasy. Typy odwołań do klas są użyteczne m. in. jako operandy operatorów is oraz as (będzie dalej). PP-5(31 z 93)

32 Typy opisujące obiekty Klasy pomocnicze Spełniają podobną rolę, co pomocnicze typy rekordowe S służą do modyfikowania kodu źródłowego bez ingerencji w oryginalne definicje klas. Definicja: type ident-typu = class helper (lista-przodków) for identyfikator-typu-oryginalnego lista-elementów-klasy-pomocniczej end; Metody zdefiniowane w klasie pomocniczej są nadrzędne PP-5(32 z 93) w stosunku do metod o takich samych nazwach.

33 Typy wskaźnikowe Zmienne dotychczas opisanych typów charakteryzują się tym, że istnieją przez cały czas wykonywania tej jednostki programowej, w której są zadeklarowane. Są to tzw. zmienne statyczne. Oprócz nich istnieją też zmienne dynamiczne, reprezentujące obiekty, dla których pamięć jest przydzielana i zwalniana na określone żądanie. Zmienne te nie mają identyfikatorów, a odwołanie do nich następuje za pomocą wskaźnika. Wartościami wskaźników są elementy typu wskaźnikowego, które określają adresy pamięci zmiennych dynamicznych. PP-5(33 z 93)

34 Typy wskaźnikowe Definicja pojedynczego typu wskaźnikowego ma postać type identyfikator-typu = ^identyfikator-typu-bazowego; gdzie identyfikator typu bazowego określa typ, którego dane będą wskazywane przez zmienne definiowanego typu wskaźnikowego. Identyfikator ten może, ale nie musi, być wcześniej określony. W drugim przypadku konieczne jest jego określenie w tej samej konstrukcji type, w której występuje definicja odnośnego typu wskaźnikowego. PP-5(34 z 93)

35 Typy wskaźnikowe Przykład type wskaźnik = ^zapis; zapis = record nagłówek : Char; tekst : string [50]; liczba : Integer end; Definicja ta wiąże typ wskaźnik ze zbiorem wskazań danych typu zapis. Jeśli wprowadzimy teraz deklarację var adres : wskaźnik; to zmiennej wskaźnikowej adres mogą być przypisywane adresy pamięci danych typu zapis. PP-5(35 z 93)

36 Typy wskaźnikowe nil - słowo kluczowe, które oznacza stałą typu wskaźnikowego nie określającą żadnego adresu (mówi się też, że słowo nil wskazuje na adres pusty). Pointer - predefiniowany typ wskaźnikowy. Zmienne typu Pointer nie wskazują danych żadnego typu, a odwołanie za ich pomocą przy użyciu symbolu ^ powoduje błąd (są one jednakże zgodne z dowolnym innym typem wskaźnikowym). Inne predefiniowane typy wskaźnikowe: PAnsiChar, PWideChar, PChar, PShortString, PAnsiString, PWideString, PString, PExtended, PCurrency, PInt64.PP-5(36 z 93)

37 Typy proceduralne Procedury i funkcje (będzie dalej) mogą być traktowane nie tylko jako części jednostki programowej wykonywane na skutek wywołania, ale także jako elementy, które mogą być przypisywane do zmiennych i przekazywane do innych funkcji i (lub) procedur jako parametry (z podobną sytuacją mamy do czynienia w przypadku metod). Zmienne tego rodzaju powinny być typów proceduralnych, wśród których wyróżniamy ogólne typy proceduralne i obiektowe typy proceduralne. PP-5(37 z 93)

38 Typy proceduralne Ogólne typy proceduralne Definicja pojedynczego typu może mieć jedną z następujących postaci: type identyfikator-typu = procedure; type identyfikator-typu = procedure (lista-parametrów); type identyfikator-typu = function : typ-wartości-funkcji; type identyfikator-typu = function (lista-parametrów) : typ-wartości-funkcji; PP-5(38 z 93)

39 Typy proceduralne Ogólne typy proceduralne Każda z podanych definicji może dodatkowo kończyć się jedną z dyrektyw języka register, pascal, cdecl, stdcall lub safecall, określającą tzw. konwencję wywołania (będzie dalej). Przykład type licz = function (x : Extended) : Extended; obliczenia = procedure (const x : Extended; f : licz; var y : Extended); PP-5(39 z 93)

40 Typy proceduralne Obiektowe typy proceduralne Są to typy określające metody. Definicja pojedynczego typu ma jedną z następujących postaci: type identyfikator-typu = procedure of object; type identyfikator-typu = procedure (lista-parametrów) of object; type identyfikator-typu = function : typ-wartości-funkcji of object; PP-5(40 z 93)

41 Typy proceduralne Obiektowe typy proceduralne Są to typy określające metody. Definicja pojedynczego typu ma jedną z następujących postaci: type identyfikator-typu = function (lista-parametrów) : typ-wartości-funkcji of object; Każda z tych definicji może być dodatkowo zakończona dyrektywą języka określającą konwencję wywołania. Elementy obiektowych typów proceduralnych są pamiętane jako dwa wskaźniki: pierwszy jest wskaźnikiem punktu wejścia do metody, a drugi określa obiekt, do którego dana PP-5(41 z 93) metoda należy.

42 Typy wariantowe Język Delphi zawiera predefiniowany typ Variant, którego elementy, zwane wariantami, mogą zmieniać typ podczas wykonywania programu. Warianty mogą być wartościami całkowitymi, rzeczywistymi, łańcuchowymi, logicznymi, typu TDateTime lub obiektami automatyzacji, a także tablicami o zmiennej liczbie wymiarów i rozmiarach oraz o elementach każdego z wymienionych typów. PP-5(42 z 93)

43 Typy wariantowe Każda zmienna typu Variant zajmuje 16 bajtów pamięci, a jej wewnętrzna reprezentacja jest rekordem typu TVarData, który zawiera określenie typu i wartość lub odwołanie (wskaźnik) do wartości. Definicja typu rekordowego TVarData (wraz ze związanym z nim typem wskaźnikowym) ma postać: PP-5(43 z 93)

44 Typy wariantowe type PVarData = ^TVarData; TVarData = packed record case Integer of Stałe o przedrostku var 0 : (VType : TVarType; (zdefiniowane w module case Integer of System) służą do 0 : (Reserved1 : Word; określenia typu wartości case Integer of wariantu. 0 : Reserved2, Reserved3 : Word; case Integer of varsmallint : (VSmallint : SmallInt); varinteger : (VInteger : Integer); varsingle : (VSingle : Single); vardouble : (VDouble : Double); varcurrency : (VCurrency : Currency);... varboolean : (VBoolean : WordBool);... varstring : (VString : Pointer);... vararray : (VArray : PVarArray);... end; PP-5(44 z 93)

45 Typy wariantowe Bezpośrednie używanie typu TVarData nie jest na ogół konieczne, gdyż do zadeklarowania zmiennych wariantowych służy predefiniowany identyfikator Variant. Typ TVarData może być użyty do zmiany typu zmiennej w odwołaniu do wariantu w celu dostępu do pól jego wewnętrznej reprezentacji. Na przykład za pomocą odwołania TVarData(zmienna-wariantowa).VType można sprawdzić aktualny typ danych zmiennej wariantowej, choć do tego celu wygod-niejsze jest zastosowanie funkcji standardowej VarType. PP-5(45 z 93)

46 Zagnieżdżone definicje typów Definicje typów mogą znajdować się wewnątrz definicji typów klasowych i typów rekordowych klasopodobnych. Typy takie nazywamy typami zagnieżdżonymi. Ich stosowanie ma na celu zgrupowanie razem (w jednym miejscu) typów powiązanych koncepcyjnie oraz zabezpiecza przed konfliktem nazw typów. Jeśli w definicji typu klasowego występuje zagnieżdżony typ klasowy, to przy dostępie do pól, metod i własności typu zagnieżdżonego należy stosować nazwy kwalifikowane uwzględniające typ zewnętrzny. PP-5(46 z 93)

47 Zgodność typów Poprawność określonej konstrukcji języka Delphi zależy na ogół od typu użytego w niej identyfikatora. W celu precyzyjnego opisu tej poprawności wprowadzono następujące pojęcia: Pidentyczności typów, Pzgodności typów, Pzgodności typów w sensie przypisania. PP-5(47 z 93)

48 Zgodność typów Identyczność typów Identyczność typów jest wymagana pomiędzy odpowiadającymi sobie parametrami formalnymi (przekazywanymi przez zmienną) i aktualnymi funkcji i procedur oraz metod. Mówimy, że dwa typy T1 i T2 są identyczne, gdy: Pmają ten sam identyfikator typu, Ptyp T1 jest zdefiniowany jako typ identyczny z T2, tzn. w definicji typu występuje konstrukcja T1=T2 lub konstrukcja, z której wynika, że T1=T2. PP-5(48 z 93)

49 Zgodność typów Identyczność typów Przykłady 1) type T1 = Integer; T2 = T1; T3 = T2; W wyniku powyższej definicji wszystkie typy T1, T2, T3 i Integer są identyczne. 2) type T4 = set of Byte; T5 = set of Byte; Na skutek tej definicji typy T4 i T5 nie będą identyczne, gdyż konstrukcja set of Byte nie oznacza identyfikatora PP-5(49 z 93) typu.

50 Zgodność typów Zgodność typów Zgodność typów wymagana jest niekiedy w wyrażeniach (będzie dalej). Dwa typy nazywamy zgodnymi, gdy spełniony jest przynajmniej jeden z następujących warunków:... (13 warunków) PP-5(50 z 93)

51 Zgodność typów Zgodność typów w sensie przypisania Zgodność typów w sensie przypisania wymagana jest przede wszystkim w instrukcji przypisania. Mówimy, że wartość w wyrażenia typu T2 jest zgodna w sensie przypisania ze zmienną x typu T1 (tzn. jest dopuszczalna instrukcja przypisania x:=w), jeżeli:... (19 warunków) PP-5(51 z 93)

52 Zmienne oraz literały stałe i zmienne Deklaracje zmiennych Zmienną nazywamy daną, która może przyjmować różne wartości w ramach typu przypisanego lub określonego dla tej zmiennej, a w przypadku, gdy typem zmiennej jest typ Variant wartości różnych typów. W języku Delphi wszystkie zmienne powinny być zadeklarowane, przy czym odpowiednie deklaracje powinny poprzedzać pierwsze wystąpienia zmiennych. PP-5(52 z 93)

53 Zmienne oraz literały stałe i zmienne Deklaracje zmiennych Deklaracje zmiennych mają postać var sekwencja-deklaracji przy czym każda deklaracja, występująca w sekwencji deklaracji, ma postać lista-identyfikatorów : oznaczenie-typu; gdzie oznaczenie typu jest opisem lub identyfikatorem typu, który określa typ zmiennej (zmiennych). Lista identyfikatorów składa się z jednego lub wielu (różnych) identyfikatorów zmiennych, przy czym w drugim przypadku poszczególne identyfikatory są oddzielone przecinkami. PP-5(53 z 93)

54 Zmienne oraz literały stałe i zmienne Deklaracje zmiennych Przykłady var i, j, k, l : Integer; a, b : Real; log : Boolean; tab : array [1..50] of Real; var p, q : A; st : stała typy A i stała powinny być określone w definicji typów PP-5(54 z 93)

55 Zmienne oraz literały stałe i zmienne Deklaracje zmiennych Zmienne zadeklarowane na zewnątrz procedur i funkcji oraz metod nazywamy zmiennymi globalnymi, a zmienne opisane wewnątrz procedur, funkcji i metod zmiennymi lokalnymi. Rozróżnienie to wynika ze sposobu przydziału pamięci. Wszystkie zmienne globalne umieszczone są w tzw. segmencie danych, dla którego pamięć przydzielana jest raz, w chwili rozpoczęcia wykonywania programu. Zmienne lokalne są umieszczane w tzw. segmencie stosowym (stosie), którego minimalny rozmiar wynosi 1024 bajty (standardowo bajty), a maksymalny bajtów. PP-5(55 z 93)

56 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Do dowolnego elementu statycznej tablicy jednowymiarowej można odwołać się za pomocą nazwy indeksowanej. W najprostszym przypadku nazwa taka składa się z nazwy tablicy, tj. identyfikatora zmiennej typu tablicowego, po której następuje ujęty w nawiasy kwadratowe indeks. Indeks jest dowolnym wyrażeniem (będzie dalej), którego wartość powinna być zgodna w sensie przypisania z typem indeksowym podanym w definicji typu tablicowego. PP-5(56 z 93)

57 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Przykład Załóżmy, że jest dany następujący opis: type wektor = array [!5..10] of Extended; var a : wektor; który definiuje typ tablicowy wektor o 16 elementach typu Extended, ponumerowanych od!5 do 10, oraz deklaruje zmienną tablicową a typu wektor. Odwołanie do piątego elementu tablicy a, tj. odwołanie do elementu tej tablicy o indeksie!1, będzie miało postać a[!1]. Natomiast odwołanie a (bez indeksu) oznacza odwołanie do całej tablicy, tj. do wszystkich jej elementów. PP-5(57 z 93)

58 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Do elementów statycznych tablic wielowymiarowych można odwoływać się w dwojaki sposób. Pierwszy z nich polega na wyspecyfikowaniu za nazwą tablicy ciągu indeksów, przy czym każdy z tych indeksów ujęty jest w nawiasy kwadratowe, a drugi uproszczony na podaniu odpowiednich indeksów oddzielonych przecinkami i ujęciu w nawiasy kwadratowe całego powstałego w ten sposób ciągu. PP-5(58 z 93)

59 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Zmienne indeksowane służą także do odwoływania się do pojedynczych znaków zmiennych typów łańcuchowych krótkich i długich. W przypadku łańcucha krótkiego zmienna indeksowana może posiadać tylko jeden indeks o wartości od 0 do n, gdzie n oznacza zadeklarowaną lub przyjmowaną standardowo długość łańcucha. W przypadku łańcuchów długich i łańcuchów Unicode wartość indeksu powinna należeć do przedziału od 1 do m, gdzie m oznacza dynamiczną długość łańcucha, przy czym dla zmiennej typu WideString wyspecyfikowanie indeksu daje wartość typu WideChar. PP-5(59 z 93)

60 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Zmienne indeksowane mogą być używane także do odwoływania się do elementów tablic dynamicznych. Deklaracja zmiennej typu tablicy dynamicznej powoduje przydzielenie jej tylko czterech bajtów pamięci zawierających wskaźnik do miejsca pamięci, począwszy od którego będą zapamiętane wartości elementów tablicy (w chwili deklaracji zmiennej bajtom tym przypisuje się wartość nil). Właściwe przydzielenie pamięci tablicy dynamicznej następuje przez wywołanie procedury standardowej SetLength lub DynArraySetLength i dopiero po tej operacji odpowiednia zmienna indeksowana określa elementy tablicy. PP-5(60 z 93)

61 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Przykład Zadeklarujmy zmienną: var tablica : array of Double; Deklaracja ta oznacza, że zmienna tablica będzie jednowymiarową tablicą dynamiczną o elementach typu Double. Deklaracja ta nie przydziela pamięci do zapamiętania tablicy, a jedynie cztery bajty do zapamiętania wskaźnika do tablicy i przypisanie im wartości nil. Jeśli zmienna tablica ma wskazywać na 20-elementową tablicę, to należy dla niej wywołać procedurę SetLength: SetLength (tablica, 20); Wywołanie to powoduje przydzielenie pamięci na wartości elementów tablicy tablica (łącznie 160 bajtów, gdyż każda wartość typu Double zajmuje 8 bajtów pamięci), której elementy będą indeksowane od 0 do 19 (elementy tablic dynamicznych są zawsze indeksowane od 0). Na przykład dostęp do pierwszego elementu tej tablicy uzyskamy za pomocą zmiennej indeksowanej tablica[0], do dziesiątego za pomocą zmiennej tablica[9], a odwołanie do ostatniego elementu tablicy będzie PP-5(61 z 93) miało postać tablica[19].

62 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Ponieważ wartościami zmiennych będących tablicami dynamicznymi są wskaźniki miejsc pamięci, w przeciwieństwie do tablic statycznych tablice dynamiczne nie są automatycznie kopiowane w wyniku instrukcji przypisującej jedną tablicę drugiej. PP-5(62 z 93)

63 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Przykład Rozważmy następujące deklaracje tablic statycznych i dynamicznych: var ts1, ts2 : array [0..0] of Integer; td1, td2 : array of Integer; W wyniku wykonania instrukcji: ts1[0]:=10; ts2:=ts1; ts2[0]:=20; wartością zmiennej indeksowanej ts2[0] będzie 20, a zmiennej ts1[0] liczba 10 PP-5(63 z 93)

64 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Przykład Jeśli jednak wykonamy instrukcje: SetLength (td1, 1); td1[0]:=10; td2:=td1; td2[0]:=20; to wartością zmiennej td1[0] będzie 20. Instrukcja przypisania td2:=td1; powoduje bowiem przydzielenie tablicy dynamicznej td2 tego samego obszaru pamięci, co tablicy td1 (wszelkie zmiany wartości elementów tablicy td2 będą więc równoważne zmianom wartości elementów tablicy td1 o tych samych indeksach). PP-5(64 z 93)

65 Zmienne oraz literały stałe i zmienne Zmienne indeksowane W przeciwieństwie do tablic statycznych, wielowymiarowe tablice dynamiczne nie muszą być prostokątne. Po zadeklarowaniu zmiennej będącej taką tablicą, za pomocą procedury SetLength można określić tylko zakres indeksów kilku początkowych wymiarów, a następnie, poprzez ponowne wywołania tej procedury dla poszczególnych wymiarów, zdefiniować różne zakresy indeksów w ramach PP-5(65 z 93) poszczególnych wymiarów.

66 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Przykład Metoda eliminacji Gaussa służąca do rozwiązywania układów równań liniowych postaci Ax = b, gdzie A oznacza macierz kwadratową stopnia n, polega na wykonaniu n! 1 przekształceń (eliminacji), które dany układ równań doprowadzają do równoważnego mu (o takim samym rozwiązaniu) układu równań Rx = c, w którym macierz R jest macierzą trójkątną górną stopnia n. Elementy macierzy trójkątnej górnej R można przechować w dwuwymiarowej, trójkątnej tablicy dynamicznej, której utworzenie dla n = 20 zapewni deklaracja var R : array of array of Extended; PP-5(66 z 93)

67 Zmienne oraz literały stałe i zmienne Zmienne indeksowane Przykład oraz następujące instrukcje: SetLength (R, 20); for i:=low(r) to High(R) do SetLength (R[i], 20!i); gdzie i oznacza zmienną typu Integer. Utworzona w ten sposób tablica dynamiczna R zajmie bajtów pamięci. Gdybyśmy tablicę R utworzyli w sposób statycz-ny, na przykład za pomocą deklaracji var R : array [0..19, 0..19] of Extended; to zajęłaby ona bajtów pamięci (prawie dwa razy więcej). Ostatnia deklaracja przydziela bowiem pamięć dla tablicy PP-5(67 z 93) prostokątnej o 20 wierszach i 20 kolumnach.

68 Zmienne oraz literały stałe i zmienne Zmienne rekordowe, obiektowe i desygnatory Zmienną, której wartości są typu rekordowego nazywamy zmienną rekordową. W celu odwołania się do elementu podstawowego rekordu (pola) należy za identyfikatorem zmiennej rekordowej podać także tzw. desygnator pola postaci.identyfikator-pola Odwołanie do pola rekordu ma zatem postać zmienna-rekordowa.identyfikator-pola PP-5(68 z 93)

69 Zmienne oraz literały stałe i zmienne Zmienne rekordowe, obiektowe i desygnatory Zmienną, której wartości są typu klasowego, nazywamy zmienną obiektową. W celu odwołania się do pola obiektu stosuje się, podobnie jak dla rekordu, desygnator pola. W odowołaniu do własności stosujemy desygnator własności:.identyfikator-własności PP-5(69 z 93)

70 Zmienne oraz literały stałe i zmienne Zmienne rekordowe, obiektowe i desygnatory W odowołaniu do metody stosujemy desygnator metody postaci.nazwa-metody lub.nazwa-metody (lista-parametrów-aktualnych) PP-5(70 z 93)

71 Zmienne oraz literały stałe i zmienne Zmienne rekordowe, obiektowe i desygnatory Odwołanie do pola obiektu ma zatem postać zmienna-obiektowa.identyfikator-pola do własności jest postaci zmienna-obiektowa.identyfikator-własności a do metody zmienna-obiektowa.nazwa-metody lub zmienna-obiektowa.nazwa-metody (lista-parametrów- -aktualnych) Odwołania do pól rekordów i obiektów można znacznie uprościć, stosując instrukcję wiążącą (będzie dalej). PP-5(71 z 93)

72 Zmienne oraz literały stałe i zmienne Zmienne dynamiczne Wartości typów wskaźnikowych, tj. wskaźniki, określają adresy pamięci zmiennych dynamicznych, którym pamięć może być przydzielana i zwalniana w trakcie wykonywania programu. W celu odwołania się do zmiennej pewnego typu, z którym związano typ wskaźnikowy, stosuje się zmienne wskazywane postaci zmienna-wskaźnikowa^ Jeżeli zmienną wskaźnikową oznaczymy przez w i założymy, że jest ona związana z typem T, to zmienną wskazywaną w^ jest ta zmienna typu T, na którą wskazuje w. Wartością PP-5(72 z 93) zmiennej w^ jest więc pewien element typu T o adresie w.

73 Zmienne oraz literały stałe i zmienne Zmienne dynamiczne Przykład type wskaźnik = ^zapis; zapis = record nagłówek : Char; tekst : string [50]; liczba : Integer end; var w : wskaźnik; W opisie tym zdefiniowano dwa typy: wskaźnikowy wskaźnik i rekordowy zapis. Wartościami zmiennej wskaźnikowej w typu wskaźnik (typ ten jest związany z typem rekordowym zapis) będą odpowiednie adresy, natomiast zmienna wskazywana w^ będzie rekordem typu zapis o adresie określonym przez w. PP-5(73 z 93)

74 Zmienne oraz literały stałe i zmienne Zmienne dynamiczne Do przydzielania pamięci zmiennym dynamicznym (do utworzenia zmiennej dynamicznej i ustalenia zmiennej wskaźnikowej wskazującej na nią) służą procedury New i GetMem (będzie dalej). Do zwolnienia obszaru pamięci dynamicznej i tym samym eliminacji odpowiedniej zmiennej dynamicznej służą procedury Dispose i FreeMem (też będzie dalej). PP-5(74 z 93)

75 Zmienne oraz literały stałe i zmienne Zmienne proceduralne Deklaracja pojedynczej zmiennej proceduralnej jest następująca: var identyfikator-zmiennej : typ-proceduralny; gdzie typ proceduralny oznacza albo nazwę ogólnego lub obiektowego typu proceduralnego, albo ich opis. PP-5(75 z 93)

76 Zmienne oraz literały stałe i zmienne Zmienne proceduralne Zmiennej proceduralnej mogą być przypisywane wartości proceduralne, tzn.: P identyfikatory funkcji i procedur, gdy zmienna jest ogólnego typu proceduralnego (ale nie funkcje i procedury z modułu System oraz zagłębione, tj. opisane wewnątrz innej funkcji lub procedury), P identyfikatory metod (z kwalifikacją obejmującą nazwę zmiennej obiektowej), gdy zmienna jest obiektowego typu proceduralnego, P wartości innych zmiennych proceduralnych, P adres pusty (nil). PP-5(76 z 93)

77 Zmienne oraz literały stałe i zmienne Zmienne proceduralne Przykłady Jeśli zadeklarujemy zmienną proceduralną parsin następująco: var parsin : function (a : Extended) : Extended; to przypisanie parsin:=sin; nie będzie możliwe, gdyż Sin oznacza funkcję standardową modułu System. Jeśli jednak zdefiniujemy funkcję: function sinus (x : Extended) : Extended; begin sinus:=sin(x) end; to przypisanie parsin:=sinus; będzie poprawne. PP-5(77 z 93)

78 Zmienne oraz literały stałe i zmienne Zmienne wariantowe Zmienne wariantowe mogą być zadeklarowane za pomocą predefiniowanego identyfiktora Variant. Podczas wykonywania programu zmiennym tego typu można przypisywać wartości różnych typów. Dozwolona jest także operacja odwrotna, tj. przypisywanie wartości zmiennych wariantowych zmiennym różnych typów. PP-5(78 z 93)

79 Zmienne oraz literały stałe i zmienne Zmienne wariantowe Przykład Załóżmy, że w programie zadeklarowano następujące zmienne: var w1, w2, w3 : Variant; i : Integer; d : Double; łańcuch : AnsiString; Zmiennym wariantowym w1, w2 i w3 można przypisać wartości różnych typów, np. w1:=5; przypisanie wartości całkowitej w2:= ; przypisanie wartości rzeczywistej w3:= Delphi XE2 ; przypisanie łańcucha Możliwość przypisania wartości zmiennych wariantowych zmiennym różnych typów oznacza, że możliwe są przypisania i:=w1; d:=w2; łańcuch:=w3; PP-5(79 z 93)

80 Zmienne oraz literały stałe i zmienne Zmienne wariantowe Zmienne wariantowe mogą zawierać tablice o zmiennym rozmiarze, zmiennej liczbie wymiarów i elementach będących wartościami dowolnego z podstawowych typów wariantowych (określonych stałymi rozpoczynającymi się od przedrostka var). Wszystkie elementy tablicy są tego samego typu, ale jeśli typem elementów jest Variant, to poszczególne elementy tablicy mogą zawierać dane różnych typów (włączając w to kolejne tablice wariantowe). Tablice wariantowe tworzy się zwykle za pomocą funkcji standardowej VarArrayCreate. PP-5(80 z 93)

81 Zmienne oraz literały stałe i zmienne Zmienne wariantowe Przykłady Deklaracja zmiennej wariantowej a postaci var a : Variant; nie określa jeszcze tej zmiennej jako tablicy wariantowej. Zmienna a będzie taką tablicą po jej utworzeniu, tj. po wykonaniu instrukcji a:=vararraycreate([0, 4], varinteger); gdzie VarArrayCreate oznacza funkcję standardową, której pierwszy argument wywołania, ujęty w nawiasy kwadratowe, określa zakres indeksów tablicy, a drugi (varinteger) typ elementów tablicy. Po utworzeniu tablicy wariantowej możliwe są przypisania wartości jej elementom, na przykład a[0]:=2; a[4]:=4; PP-5(81 z 93)

82 Zmienne oraz literały stałe i zmienne Zmienne wariantowe Przykłady W celu utworzenia dwuwymiarowej tablicy wariantowej należałoby zastosować instrukcję postaci a:=vararraycreate ([0, 3, 1, 5], vardouble); W wywołaniu funkcji VarArrayCreate pierwszy parametr (ujęty w nawiasy kwadratowe) definiuje zakres indeksów pierwszego wymiaru tablicy (od 0 do 3) oraz drugiego (od 1 do 5). W celu przypisania elementowi tej tablicy o indeksach 0 i 2 wartości 1,2345 należałoby zastosować instrukcję a[0,2]:=1.2345; Ewentualne odwołanie a[0,0] spowodowałoby wystąpienie warunku błędu EVariantError, gdyż drugi indeks nie należy do PP-5(82 z 93) dozwolonego zakresu indeksów drugiego wymiaru tablicy.

83 Zmienne oraz literały stałe i zmienne Zmienne wątkowe Wykonywanie programu, który ma swój kod i dane, zajmuje własną, wirtualną przestrzeń adresową oraz korzysta z zasobów systemowych, nazywa się procesem. Na proces może składać się jeden lub kilka wątków. Wątek jest podstawową jednostką, której system operacyjny przydziela czas procesora. Jest on niezależną ścieżką wykonywania części kodu programu wewnątrz procesu. Wszystkie wątki programu wykorzystują tę samą wirtualną przestrzeń adresową, zmienne globalne i zasoby systemowe procesu. Oprócz tego każdy wątek posiada swoje własne rejestry, własny stos i własny mechanizm wejścia, w tym PP-5(83 z 93) kolejkę wiadomości.

84 Zmienne oraz literały stałe i zmienne Zmienne wątkowe Z obsługą wątków są związane zmienne wątkowe, które deklaruje się następująco: threadvar sekwencja-deklaracji gdzie sekwencja deklaracji ma taką samą postać, jak w przypadku zwykłej deklaracji zmiennych. Deklaracja jakiejś zmiennej jako wątkowej oznacza, że jest ona zmienną lokalną w ramach wątku. Do obsługi wątków zaprojektowano w języku Delphi klasę TThread zdefiniowaną w module System.Classes (zob. system pomocy). PP-5(84 z 93)

85 Zmienne oraz literały stałe i zmienne Zmienne z początkową wartością W deklaracji zmiennej można nadać jej pewną początkową wartość, która następnie może być zmieniana. Do zadeklarowania zmiennej z początkową wartością służy konstrukcja var identyfikator-zmiennej : oznaczenie-typu = stała- typowa; gdzie oznaczenie typu jest identyfikatorem typu lub jego opisem, a stała typowa oznacza m. in. wyrażenie stałe. PP-5(85 z 93)

86 Zmienne oraz literały stałe i zmienne Zmienne z początkową wartością Zmienne, którym nadano początkową wartość, mogą być wyłącznie zmiennymi globalnymi. Oznacza to, że podana konstrukcja nie może wystąpić w definicjach funkcji i procedur oraz metod. Nie jest dozwolone przypisywanie początkowych wartości zmiennym plikowym i wariantowym. Przykład var x : Real = 1.23; Konstrukcja ta deklaruje zmienną x typu Real i jednocześnie nadaje jej wartość 1,23. PP-5(86 z 93)

87 Zmienne oraz literały stałe i zmienne Nakładanie zmiennych Każdej zmiennej można przydzielić pamięć o takim samym adresie, jaki posiada inna zmienna, zadeklarowana wcześniej. Oznacza to w praktyce, że obie zmienne rezydują w tym samym obszarze pamięci, tj. są na siebie nałożone. Odpowiednia deklaracja ma postać var identyfikator-zmiennej-1 : oznaczenie-typu absolute identyfikator-zmiennej-2; gdzie identyfikator podany po słowie absolute oznacza zmienną zadeklarowaną wcześniej. Powyższa deklaracja powoduje przydzielenie pamięci nowej zmiennej począwszy od miejsca, w którym rozpoczyna się pierwsza zmienna. PP-5(87 z 93)

88 Zmienne oraz literały stałe i zmienne Zmiana typu zmiennej w odwołaniu Odwołanie do zmiennej określonego typu może być zmienione na odwołanie do tej samej zmiennej, ale innego typu. Służy do tego konstrukcja postaci identyfikator-typu (odwołanie-do-zmiennej) Po zastosowaniu podanej konstrukcji zmienna taka będzie traktowana jak zmienna typu określonego przez wyspecyfikowany identyfikator typu. Rozmiar zmiennej, tj. liczba zajmowanych przez nią bajtów pamięci, musi być przy tym zgodny z rozmiarem typu o podanym identyfikatorze. Nie wszystkie zamiany typu zmiennej są dozwolone! PP-5(88 z 93)

89 Zmienne oraz literały stałe i zmienne Literały Stałe mogą być zastąpione przez przypisane im identyfikatory. Przypisanie identyfikatorów do stałych (wyrażeń stałych) następuje za pomocą konstrukcji const sekwencja-definicji-nazw-literałów gdzie każda definicja nazwy literału ma postać identyfikator = wyrażenie-stałe; lub identyfikator : oznaczenie-typu = stała-typowa; PP-5(89 z 93)

90 Zmienne oraz literały stałe i zmienne Literały Druga postać definicji nazwy literału określa tzw. literał zmienny. O tym, czy tak zdefiniowanemu identyfikatorowi można dalej (w części wykonawczej) zmienić wartość, czy nie, decyduje stan dyrektywy kompilatora $J. W domyślnym stanie {$J+} zmiana wartości przypisanej literałowi zmiennemu w jego definicji jest dozwolona. Spełnia on wówczas tę samą rolę, co zmienna z początkową wartością. Jeśli jednak dyrektywa kompilatora $J jest wyłączona (stan {$J!}), to literał zmienny jest przeznaczony tylko do odczytu. PP-5(90 z 93)

91 Zmienne oraz literały stałe i zmienne Literały Przygotować samodzielnie przypisywanie początkowych wartości literałom różnych typów. PP-5(91 z 93)

92 Zmienne oraz literały stałe i zmienne Zagnieżdżone definicje literałów Definicje literałów mogą występować w obrębie definicji klas i typów rekordowych (podobnie jak definicje typów). Literały takie nazywamy literałami zagnieżdżonymi. Definicja literałów zagnieżdżonych rozpoczyna się słowem kluczowym const i kończy wystąpieniem jednostki leksykalnej, która nie jest identyfikatorem, np. słów kluczowych var, procedure, a w przypadku klas także specyfikatora dostępności. PP-5(92 z 93)

93 161 stron pewnej książki mamy już za sobą!!! PP-5(93 z 93)

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści Język programowania DELPHI / Andrzej Marciniak. Poznań, 2012 Spis treści Przedmowa 11 Przyjęta notacja 13 Rozdział 1. Wprowadzenie 15 1.1. Ogólne zasady programowania zorientowanego obiektowo 15 1.2. Historia

Bardziej szczegółowo

PODSTAWY PROGRAMOWANIA

PODSTAWY PROGRAMOWANIA PODSTAWY PROGRAMOWANIA Andrzej Marciniak Prezentacja multimedialna przygotowana za pomocą systemu Corel Presentations X3 Copyright 2003-2017 by Andrzej Marciniak PP-4(1 z 88) Na poprzednim wykładzie...

Bardziej szczegółowo

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych: Zmienna i typ Pascal typy danych Zmienna to obiekt, który może przybierać różne wartości. Typ zmiennej to zakres wartości, które może przybierać zmienna. Deklarujemy je w nagłówku poprzedzając słowem kluczowym

Bardziej szczegółowo

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. 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

Bardziej szczegółowo

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wykład 8: klasy cz. 4

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

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

PODSTAWY PROGRAMOWANIA

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...

Bardziej szczegółowo

Tworzenie własnych komponentów

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

Bardziej szczegółowo

Tablice. Jones Stygar na tropie zmiennych

Tablice. Jones Stygar na tropie zmiennych Tablice Jones Stygar na tropie zmiennych Czym jest tablica? Obecnie praktycznie wszystkie języki programowania obsługują tablice. W matematyce odpowiednikiem tablicy jednowymiarowej jest ciąg (lub wektor),

Bardziej szczegółowo

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe Podstawy programowania Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe 1 Podstawy programowania Część I Łańcuchy znaków 2 I. Zmienne łańcuchowe Klasyfikacja zmiennych statycznych

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

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

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Informatyka I Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Dziedziczenie klas

Bardziej szczegółowo

Wstęp do programowania. Różne różności

Wstęp do programowania. Różne różności Wstęp do programowania Różne różności Typy danych Typ danych określa dwie rzeczy: Jak wartości danego typu są określane w pamięci Jakie operacje są dozwolone na obiektach danego typu 2 Rodzaje typów Proste

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

Podstawy Programowania semestr drugi. Wykład czternasty

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Język programowania. Andrzej Bobyk http://www.alfabeta.lublin.pl. www.alfabeta.lublin.pl/jp/

Język programowania. Andrzej Bobyk http://www.alfabeta.lublin.pl. www.alfabeta.lublin.pl/jp/ Język programowania Andrzej Bobyk http://www.alfabeta.lublin.pl www.alfabeta.lublin.pl/jp/ Literatura K. Reisdorph: Delphi 6 dla każdego. Helion, Gliwice 2001 A. Grażyński, Z. Zarzycki: Delphi 7 dla każdego.

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Język programowania PASCAL

Język programowania PASCAL Język programowania PASCAL (wersja podstawowa - standard) Literatura: dowolny podręcznik do języka PASCAL (na laboratoriach Borland) Iglewski, Madey, Matwin PASCAL STANDARD, PASCAL 360 Marciniak TURBO

Bardziej szczegółowo

Podstawy Programowania 2

Podstawy Programowania 2 Podstawy Programowania 2 Laboratorium 7 Instrukcja 6 Object Pascal Opracował: mgr inż. Leszek Ciopiński Wstęp: Programowanie obiektowe a programowanie strukturalne. W programowaniu strukturalnym, któremu

Bardziej szczegółowo

Materiały do zajęć VII

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

Bardziej szczegółowo

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. 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ą

Bardziej szczegółowo

Wykład 4: Klasy i Metody

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

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

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? 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

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Bardziej szczegółowo

Ada-95. Dariusz Wawrzyniak

Ada-95. Dariusz Wawrzyniak Część I Wskaźniki Plan Typy wskaźnikowe i obiekty wskazywane 1 Typy wskaźnikowe i obiekty wskazywane 2 3 4 Plan Typy wskaźnikowe i obiekty wskazywane 1 Typy wskaźnikowe i obiekty wskazywane 2 3 4 Wskaźniki

Bardziej szczegółowo

Algorytmy i struktury danych. wykład 1

Algorytmy i struktury danych. wykład 1 Plan całego wykładu:. Pojęcie algorytmu, projektowanie wstępujące i zstępujące, rekurencja. Klasy algorytmów. Poprawność algorytmu, złożoność obliczeniowa. Wskaźniki, dynamiczne struktury danych: listy,

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Wstęp do programowania 2

Wstęp do programowania 2 Wstęp do programowania 2 wykład 1 rekordy z wyróżnikami Agata Półrola Wydział Matematyki UŁ 2005/2006 Egzamin z I roku - problemy Problemy z wczytywaniem danych: skip_line Problemy z obliczeniami: zerowanie

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

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

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

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ą

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Klasy abstrakcyjne i interfejsy

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

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

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

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

C-struktury wykład. Dorota Pylak

C-struktury wykład. Dorota Pylak C-struktury wykład Dorota Pylak C-struktury W języku C++, jak w każdym języku obiektowym, mamy możliwość definiowania własnych typów danych, wraz z określeniem operacji, jakie na tych danych można wykonywać.

Bardziej szczegółowo

Programowanie obiektowe

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;

Bardziej szczegółowo

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie

Bardziej szczegółowo

Delphi Laboratorium 3

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ść,

Bardziej szczegółowo

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

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 12 Struktury, unie, pola bitowe 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Struktury 2 Struktury Struktury to złożone typy danych

Bardziej szczegółowo

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

Typy danych, zmienne i tablice. Tomasz Borzyszkowski Typy danych, zmienne i tablice Tomasz Borzyszkowski Silne typy Javy Java jest językiem wyposażonym w silny system typów. Wywodzi się stąd siła i bezpieczeństwo tego języka. Co to znaczy silny system typów?

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I 11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

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

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

Wstęp do programowania 2

Wstęp do programowania 2 Wstęp do programowania 2 wykład 6 typy dostępu c.d Agata Półrola Wydział Matematyki UŁ 2005/2006 http://www.math.uni.lodz.pl/~polrola Przykład wykorzystania typów dostępu zob. pakiet rodzajowy listapak

Bardziej szczegółowo

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Wykład 4. Tablice. Dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Tablice Tablica uporządkowany zbiór elementów określonego typu Każdy element tablicy posiada

Bardziej szczegółowo

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 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

Bardziej szczegółowo

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

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;

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Podstawy algorytmiki i programowania - wykład 4 C-struktury 1 Podstawy algorytmiki i programowania - wykład 4 C-struktury Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy

Bardziej szczegółowo

Wykład 9: Polimorfizm i klasy wirtualne

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

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Język programowania Ruby Marcin Młotkowski 12 kwietnia 2018 Plan wykładu 1 Wstęp 2 Typy numeryczne Łańcuchy znaków (klasa String) Przedziały Tablice i tablice asocjacyjne Nazwy

Bardziej szczegółowo

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

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę. Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji

Bardziej szczegółowo

Dziedziczenie jednobazowe, poliformizm

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

Bardziej szczegółowo

Wykład 1: Wskaźniki i zmienne dynamiczne

Wykład 1: Wskaźniki i zmienne dynamiczne Programowanie obiektowe Wykład 1: Wskaźniki i zmienne dynamiczne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Podstawy programowania w C++ Wskaźniki 2 dr Artur Bartoszewski - Programowanie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

Deklaracja struktury w C++

Deklaracja struktury w C++ Struktury to złożone typy danych pozwalające przechowywać różne informacje. Za pomocą struktur możliwe jest grupowanie wielu zmiennych o różnych typach w jeden obiekt. Strukturę można nazywać obiektem

Bardziej szczegółowo

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych 2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:

Bardziej szczegółowo

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

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

.NET Klasy, obiekty. ciąg dalszy

.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,

Bardziej szczegółowo

Pascal - wprowadzenie

Pascal - wprowadzenie Pascal - wprowadzenie Ogólne informacje o specyfice języka i budowaniu programów Filip Jarmuszczak kl. III c Historia Pascal dawniej jeden z najpopularniejszych języków programowania, uniwersalny, wysokiego

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

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

Bardziej szczegółowo

Paweł Kurzawa, Delfina Kongo

Paweł Kurzawa, Delfina Kongo Paweł Kurzawa, Delfina Kongo Pierwsze prace nad standaryzacją Obiektowych baz danych zaczęły się w roku 1991. Stworzona została grupa do prac nad standardem, została ona nazwana Object Database Management

Bardziej szczegółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Programowanie obiektowe

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.

Bardziej szczegółowo

Język C++ zajęcia nr 2

Język C++ zajęcia nr 2 Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator

Bardziej szczegółowo

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

Wykład 5 Okna MDI i SDI, dziedziczenie

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

Bardziej szczegółowo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

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

Wykład 3 Składnia języka C# (cz. 2) Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest

Bardziej szczegółowo

Programowanie RAD Delphi

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

Bardziej szczegółowo

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 7 kwietnia 2014 1. Wprowadzenie Pierwsza część instrukcji zawiera informacje

Bardziej szczegółowo

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. 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

Bardziej szczegółowo

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

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 2 Podstawy programowania 2 Temat: Zmienne dynamiczne tablica wskaźników i stos dynamiczny Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1 Tablice wskaźników Tablice

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 8 Wprowadzenie Definiowanie typu obiektowego Porównywanie obiektów Tabele z obiektami Operacje DML na obiektach Dziedziczenie -

Bardziej szczegółowo

Definiowanie własnych klas

Definiowanie własnych klas Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:

Bardziej szczegółowo

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

Pola i metody statyczne. Klasy zawierające pola i metody statyczne Instrukcja laboratoryjna nr 1 Programowanie w języku C 2 (C++ poziom zaawansowany) Pola i metody statyczne. Klasy zawierające pola i metody statyczne dr inż. Kaczmarek Tomasz mgr inż. Lasota Maciej dr

Bardziej szczegółowo

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne: Instrukcje podsumowanie Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne: - grupująca end - warunkowa if

Bardziej szczegółowo

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Konwersje liczba napis Ćwiczenia 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12,

Bardziej szczegółowo

Wykład 4. Tablice. Pliki

Wykład 4. Tablice. Pliki Informatyka I Wykład 4. Tablice. Pliki Dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Tablice Tablica uporządkowany zbiór elementów określonego typu Każdy element tablicy posiada

Bardziej szczegółowo

PODSTAWY PROGRAMOWANIA

PODSTAWY PROGRAMOWANIA PODSTAWY PROGRAMOWANIA Andrzej Marciniak Prezentacja multimedialna przygotowana za pomocą systemu Corel Presentations X3 Copyright 2003-2016 by Andrzej Marciniak PP-7(1 z 84) Na poprzednim wykładzie...

Bardziej szczegółowo

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

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?

Bardziej szczegółowo

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych. Złożone typy danych - TABLICE TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych. * Może przechowywać dowolny typ danych, typ

Bardziej szczegółowo