Wstęp do programowania 2

Podobne dokumenty
Ada-95. Dariusz Wawrzyniak

Wstęp do programowania 2

Lab 9 Podstawy Programowania

Wstęp do programowania 2

ZASADY PROGRAMOWANIA KOMPUTERÓW

Wskaźniki. Informatyka

Wykład 4: Klasy i Metody

Podstawy programowania w języku C++

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Programowanie strukturalne

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Programowanie obiektowe W3

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

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

KURS C/C++ WYKŁAD 6. Wskaźniki

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

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

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

Techniki Programowania wskaźniki

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

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

Algorytmy i struktury danych. wykład 1

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np.

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

Wstęp do programowania 2

Języki i techniki programowania Ćwiczenia 2

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

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

Podstawy programowania komputerów

Zmienne i struktury dynamiczne

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Podstawy programowania obiektowego

Podstawy programowania 1

Definiowanie własnych klas

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

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

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

PODSTAWOWE ZASADY PROGRAMOWANIA OBIEKTOWEGO NA BAZIE PAKIETU ROOT

Ada 95 #1/5 - typy. Typy skalarne. Hierarchia typów w Adzie. Typ znakowy. Typy dyskretne. Plan wykładu

Przydział pamięci. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

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

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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

Wstęp do programowania

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

Wskaźniki w C. Anna Gogolińska

Wykład 1: Wskaźniki i zmienne dynamiczne

Stałe, tablice dynamiczne i wielowymiarowe

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Tablice, funkcje - wprowadzenie

Wykład 8: klasy cz. 4

Programowanie obiektowe

Podstawy programowania w języku C++

Wykład 9: Polimorfizm i klasy wirtualne

Struktury - wprowadzenie

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

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

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

Podstawy programowania w języku C++

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu

Wstęp do programowania

Podstawy Programowania semestr drugi. Wykład czternasty

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

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Wprowadzenie do programowania w języku C

Oracle PL/SQL. Paweł Rajba.

1. ELEMENTY JĘZYKA PL/SQL

Podstawy programowania w języku C++

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

Wstęp do programowania

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

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

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Język C zajęcia nr 11. Funkcje

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Podstawy C# Tablice

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

Pola i metody statyczne

Szablony klas, zastosowanie szablonów w programach

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

15. Funkcje i procedury składowane PL/SQL

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

Wprowadzenie do programowanie obiektowego w języku C++

PODSTAWY BAZ DANYCH 13. PL/SQL

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Podstawy Programowania

Podstawy programowania 2. Temat: Wprowadzenie do wskaźników. Przygotował: mgr inż. Tomasz Michno

Referencje do zmiennych i obiektów

Transkrypt:

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 (lista sortowana)

type box; type wsk_box is access box; type box is record dane: integer; nast: wsk_box; end record;

Deklaracja stałych Można deklarować stałe typu dostępu c: constant wsk_box := new box'(0,null); przy deklaracji konieczne jest nadanie wartości początkowej bycie stałą oznacza w tym przypadku, że wartość typu dostępu musi cały czas odwoływać się do tego samego obiektu wartość wskazywanego obiektu można zmienić

c: constant wsk_box := new box'(0,null); l:wsk_box:=new box'(1,null); c.all := l.all; --c:=l; -- niepoprawne

sposób obsługi stałych typu dostępu wyjaśnia również sposób przekazywania elementów typu dostępu jako parametrów podprogramów function suma(p: wsk_box) return integer is pom:wsk_box :=p; s: integer :=0; begin while pom /= null loop s := s + pom.dane; end loop; return s; end suma;

Przekazywanie parametrów podprogram operuje na kopii zmiennej będącej parametrem w przypadku parametru w trybie out jego wartość jest kopiowana do podprogramu, aby zapobiec losowym odwołaniom

Pool-specific access types Poznane dotychczas typy dostępu są typami pool-specific nowe obiekty są alokowane w obszarze pamięci (storage pool) skojarzonym z danym typem dostępu obszar skojarzony z typem dostępu przestaje istnieć gdy skończy się zasięg widoczności tego typu

obiekty do których odwołujemy się za pomocą pool specific access types muszą być obiektami zaalokowanymi za pomocą new b:box; w: wsk_box := b; -- niepoprawne Ograniczenie to nie występuje w przypadku tzw. ogólnych typów dostępu (general access types)

W przypadku gdy zaalokowany obiekt przestaje być dostępny (nie odwołuje się do niego żadna wartość typu dostępu) zajmowana przez niego pamięć może zostać automatycznie zwolniona (garbage collection). w praktyce jest to zaimplementowane w niewielu kompilatorach

w1: wsk_int_1 := new integer'(2); w2: wsk_int_2 := new integer'(4) w1.all := w2.all; -- w1 := w2; -- niedozwolone Nie ma możliwości konwersji jednego pool-specific access type na inny (nawet w pokazany wyżej sposób). Wartość typu dostępu może odwoływać się tylko do obiektów w swoim obszarze.

Sposoby inicjowania zmiennej a: array(1..10) of wsk_box := (1..10 => new box); -- alokacja 10 obiektów b1,b2: wsk_box := new box; -- alokacja 2 obiektów nn: wsk_box := new box'(1,null); ll: wsk_box := new box'(nn.all); i: integer := 2; nnn: wsk_int := new integer'(i);

Zakresy Typy dostępu mogą odwoływać się do: podtypów type wsk_pos is access positive; type wsk_pos1 is access integer range 1.. integer'last; wp : wsk_pos := new positive'(10); wp1 : wsk_pos := new integer'(10); wp2 : wsk_pos := new integer'(0); -- Constraint_Error

tablic zawężonych lub niezawężonych type tab is array (integer range <>,integer range <>) of float; type wsk_tab is access tab; wt,wt1 : wsk_tab; -- przy alokacji trzeba podać rozmiar: wt := new tab'(1..10 => (1..10 => 0.0)); wt1 := new tab(1..5,1..5); -- niedozwolone: wt1 := new tab; wt, wt1 mogą odwoływać się do tablic różnego rozmiaru po zaalokowaniu rozmiar tablicy nie może być zmieniany

subtype wsk_tab_3 is wsk_tab(1..3,1..3); wt3: wsk_tab_3; -- odpowiednik wt33 : wsk_tab(1..3,1..3); subtype tab3 is tab(1..3,1..3); wt3 := new tab3; wt33 := new tab3'(others=>(others=>0.0));

Odwołanie do elementów tablic: wt := new tab'(1..10 => (1..10 => 0.0)); wt1 := new tab(1..5,1..5); wt(1,1) := 0.1; wt.all := (others=> (others=> 0.1));

Typy dostępu mogą odwoływać się do innych typów dostępu type wsk_int is access integer; wi: wsk_int := new integer'(4); type wsk_wsk is access wsk_int; www: wsk_wsk; begin www:=new wsk_int; www.all := wi; put(www.all.all); www.all.all := 2;

General access types Dotychczas poznane typy dostępu umożliwiały operacje na elementach tworzonych dynamicznie (alokowanych za pomocą new) Typy dostępu mogą służyć do odwoływania się do obiektów zadeklarowanych statycznie. Są to tzw. ogólne typy dostępu (general access types).

type wsk_int_g is access all integer; i: aliased integer:=0; wii: wsk_int_g; wii:=i'access; można czytać i modyfikować wartość zmiennej i za pomocą zmiennej typu dostepu

w deklaracji typu dostępu używamy słowa all, zmienne do których odwołujemy się w powyższy sposób deklarujemy jako aliased ostrzeżenie dla programisty (zmienna może być modyfikowana niebezpośrednio) informacja dla kompilatora (nie należy przydzielać miejsca na zmienną w niestandardowy sposób uniemożliwiający późniejsze odwołanie)

Ograniczenie dostepu Możemy ograniczyć dostęp do zmiennej tak, aby zmienne (i stałe) były tylko do odczytu type wsk_int_c is access constant integer; i: aliased integer; ic: aliased constant integer := 1212; wii: wsk_int_c; wii:=i'access; -- dostep do zmiennej wii:=ic'access; -- dostep do stalej

Dostęp do elementów tablic składowe tablicy również mogą być zadeklarowane jako aliased tabi : array(1..100) of aliased integer; type wsk_int_g is access all integer; wii:= wsk_int_g; wii:= tabi(i)'access;

Dostęp do pól rekordu można również deklarować jako aliased pola rekordu type komorka is record i: aliased integer; j: integer; end record; type wsk_int_g is access all integer; wii:= wsk_int_g; k: komorka; wii:=k.i'access;

Konwersja typów konwersja dla pool-specific access types nie jest dozwolona konwersja między general access type jest możliwa: wskazywane typy muszą być takie same zakresy podtypów muszą być zgodne typ dostępu tylko do odczytu nie może być przekonwertowany na typ dostępu do zmiennej

pool-specific type może być przekonwertowany do general access type, ale nie odwrotnie