• Nie Znaleziono Wyników

Wprowadzenie

N/A
N/A
Protected

Academic year: 2021

Share "Wprowadzenie"

Copied!
49
0
0

Pełen tekst

(1)

Wykład 1: Wprowadzenie

8.obsługa błędów 9.kolekcje obiektów 10.wejście i wyjście 11.równoległość 12.interfejs graficzny 13.programy sieciowe 14.obsługa baz danych 15.obsługa serwerów 1.wprowadzenie 2.podstawy języka 3.sterowanie 4.inicjacja i sprzątanie 5.kontrola dostępu 6.dziedziczenie 7.polimorfizm

(2)

Wykład 1: Zagadnienia

✔ pojęcia programowanie obiektowego

(3)

Programowanie i Złożoność

Złożoność problemów które potrafimy rozwiązać zależy od poziomu i jakości

abstrakcji dostarczonej przez dany język.

– abstrakcja wykonawcza

(4)

Abstrakcja Wykonawcza

Abstrakcja od szczegółów maszyny, która wykonuje program:

– asembler jest abstrakcją języka

maszynowego

– języki imperatywne (Fortran, Basic, C)

(5)

Assembler: Przykład

mov 1,%i4 mov 2,%i3 cmp %i3,%i0 bge .L77006 sethi %hi(.L16+8),%o0 add %o0,%lo(.L16+8),%i5 .LY1: add %i2,%i4,%i2

st %i2,[%i5] mov %i4,%i2 ld [%i5],%i4 inc %i3 cmp %i3,%i0 bl .LY1 Fragment kodu do obliczania ciągu liczb Fibonacciego.

(6)

C: Przykład

unsigned * fibonacci(int n) {

static unsigned fib_array[MAX_FIB] = {0,1}; unsigned prev_number = 0;

unsigned curr_number = 1;

for (int i = 2; i < n; i++) {

fib_array[i] = prev_number + curr_number; prev_number = curr_number;

curr_number = fib_array[i]; }

return(fib_array); }

(7)

Abstrakcja Wykonawcza

– modelowanie w kategorii maszyny, nie

w kategorii problemu

– odwzorowania problemu na model

maszyny wykonawczej jest sztuczne

– programy są trudne to napisania i

(8)

Abstrakcja Problemowa

Abstrakcja przez modelowanie problemu:

– LISP: problemy wyrażone listami

– PROLOG: problemy wyrażone przy

pomocy reguł logicznych

– AWK: problemy przetwarzania plików

(9)

LISP: Przykład

(defun fib (n)

(cond ((or (not (numberp n)) (< n 0))

(error "~s is not a legal value for n!~&" n)) ((eql n 0) 0) ;; base case

((eql n 1) 1) ;; base case (t (+ (fib (- n 1))

(fib (- n 2)))) ))

(10)

PROLOG: Przykład

fibonacci(0,0). fibonacci(1,1). fibonacci(N,A) :- N1 is N-1, N2 is N1-1, fibonacci(N1,A1), fibonacci(N2,A2), A is A1 + A2.

(11)

Abstrakcja Problemowa

– Każdy język jest odpowiedni dla

pewnej (wąskiej) klasy problemów.

– Rozwiązywanie problemów spoza

(12)

Narzędzia Budowy Abstrakcji

Programowanie obiektowe dostarcza narzędzi do reprezentacji elementów:

– w przestrzeni problemu

– w przestrzeni rozwiązań

W obu przypadkach używamy obiektów jak podstawowej konstrukcji

(13)

Modelowanie Obiektowe

Pracownik staż urlopy staż urlopy naUrlop() naSzkolenie() ... Pracownik staż urlopy staż urlopy naUrlop() naSzkolenie() ... Tablica max wartosc inicjuj() wstaw() zwroc() przestrzeń

(14)

Obiektowość i Adaptowalność

– Program obiektowy dostosowuje się do

specyficznego języka danego problemu.

– Opisuje problem w kategoriach

właściwych, a nie w kategoriach maszyny wykonującej.

– Abstrakcja nie ogranicza się do

(15)

Podejście Obiektowe

1.wszystko jest obiektem

2.program jest zbiorem obiektów które wysyłają sobie komunikaty

3.każdy obiekt posiada pamięć na którą składają się inne obiekty

4.każdy obiekt posiada swój typ

5.wszystkie obiekty tego samego typu mogą otrzymywać te same

(16)

Stan, Zachowanie, Tożsamość

Obiekt ma stan, zachowanie i tożsamość:

✔ stan – dane wewnętrzne

✔ zachowanie – zestaw metod do

wykonania

✔ tożsamość – każdy obiekt można w

sposób jednoznaczny odróżnić od innych obiektów

(17)

Obiekty i Klasy

Obiekty które są identyczne z wyjątkiem stanu są grupowane w klasy.

Obiekty klasy mają tą samą:

– charakterystykę – elementy składowe

– zachowanie – operacje na stanie

(18)

Abstrakcyjne Typy Danych

Klasa definiuje abstrakcyjny typ danych. Te same możliwości jak typy podstawowe:

✔ tworzenie zmiennych typu (obiektów)

✔ manipulowanie zmiennymi

Możliwość definiowania własnych typów (klas). Rozszerzenie języka.

(19)

Interfejs Obiektu

Definicja klasy: interfejs i implementacja.

Zarowka zapal() zgas()

rozjasnij() przyciemnij()

Interfejs ustala jakie żądania można wysyłać pod adresem obiektu.

(20)

Implementacja Obiektu

Utworzenie obiektu klasy:

Zarowka zr = new Zarowka();

Żądanie pod kierunkiem obiektu:

zr.zapal();

Implementacja to kod umożliwiający wykonanie żądań przez obiekt.

(21)

Obiekt jako Usługodawca

● program dostarcza usług

● program składa się ze zbioru obiektów ● realizuje usługi wykorzystując usługi

wykonywane przez składowe obiekty

● usługowy model ułatwia projektowanie,

(22)

Ukrywanie Implementacji

Dwie grupy użytkowników:

● budowniczy aplikacji – tworzenie

aplikacji za pomocą gotowych klas

● budowniczy klas – udostępnienie

interfejsu klas to budowy aplikacji

(23)

Zalety Ukrywania

● ochrona wewnętrznych operacji/danych

przed ingerencją z zewnątrz

● szczegóły istotne i nieistotne

● wymiana implementacji klas bez wpływu

(24)

Kontrola Dostępu

Trzy poziomy kontroli dostępu:

● public – dostępne dla każdego

● private – tylko twórca klasy

● protected – dostęp mają tylko dana

(25)

Budowa Klas

Budowa na podstawie klas już istniejących:

– agregacja - stworzenie i użycie obiektu

klasy w nowej klasie.

(26)

Dziedziczenie

Klonowanie klas:

● klasa bazowej (nad-klasa) ● modyfikacja i rozszerzenia ● klasa pochodna (podklasa)

Typ bazowy: cechy typów pochodnych. Typ pochodny: cechy dodatkowe.

(27)

Przykład Dziedziczenia

Figura

narysuj() wymaz() przesun()

Okrag Trojkat Kwadrat

Z bazowej figury, wywodzimy różne figury konkretne.

(28)

Dziedziczenie: Dodawanie

Figura narysuj() wymaz() przesun() Okrag Kwadrat odwrocPoziomo() odwrocPionowo() Trojkat

Dodajemy do klasy potomnej nowe metody, często iteracyjnie.

(29)

Dziedziczenie: Przesłanianie

Figura narysuj() wymaz() przesun() Okrag Kwadrat odwrocPoziomo() odwrocPionowo() Trojkat

Przesłaniamy metody klasy bazowej przez nowe implementacje metod.

narysuj() wymaz()

(30)

Zasada Zastępowalności

✔ Akceptujemy obiekty klasy bazowej -

można użyć obiektów klasy pochodnej.

✔ Wymagana jest klasa potomna -

obiekty klasy bazowej nie wystarczą.

✔ Wyjątek: dziedziczenie nie dodaje

(31)

Wymienialność Obiektów

Obiekt jako reprezentant typu bazowego. Kod niezależny od konkretnego typu.

Problem: kompilator nie może zdecydować jaki kod ma zostać wykonany.

(32)

Wczesne i Późne Wiązanie

1.Wczesne wiązanie: kompilator generuje wywołanie funkcji, program łączący

zamienia nazwę na konkretny adres.

2.Późne wiązanie: kompilator upewnia się ze metoda istnieje, jednak kod jest dopiero ustalony w czasie wykonania.

(33)

Polimorfizm: Przykład

Metoda działająca na dowolne figurze:

void zrobCos(Figura f) { f.wymaz();

...

f.narysuj() }

(34)

Polimorfizm: Przykład

Tworzenie i użycie konkretnych figur:

Okrag o = new Okrag();

Trojkat t = new Trojkat(); zrobCos(o);

zrobCos(t);

(35)

Rzutowanie w Górę

Typ pochodny jako typ bazowy, dostosowanie do formy tego typu.

Figura

(36)

Klasy Abstrakcyjne

✔ nie posiada obiektów

✔ używana do definicji interfejsu dla

(37)

Metody Abstrakcyjne

✔ metoda nie została zaimplementowana

✔ jedynie wewnątrz klasy abstrakcyjnej ✔ dziedziczenie po klasie abstrakcyjnej:

✔ metoda abstrakcyjna musi zostać

zaimplementowana

(38)

Interfejs

Klasa gdzie zabronione jest definiowanie wszystkich funkcji.

(39)

Podsumowanie

Programowanie obiektowe to:

✔ enkapsulacja (klasy i obiekty) ✔ dziedziczenie

✔ polimorfizm

(40)

Metody Tworzenia Obiektów

1.Metoda statyczna

✔ Na stosie lub w obszarze statycznym.

Metoda szybka, programista musi sam zwolnić pamięć.

2.Metody dynamiczna (Java!)

✔ Tworzenie dynamiczne obiektów na

stercie. Ilość i czas życia obiektów nieznany do czasu wykonania.

(41)

Czas Życia Obiektów

Metoda statyczna: kompilator wyznacza czas trwania obiektu, i sam go niszczy. Metodzie dynamicznej: czas nieznany. Java używa odśmiecacz pamięci, by

(42)

Kolekcje Obiektów

Kolekcja (kontener) to obiekt który zawiera referencje do innych obiektów.

Potrzebne gdy liczba potrzebnych obiektów nie jest zadana z góry.

(43)

Iteratory

✔ Obiekt którego zadaniem jest

wybieranie obiektów z kontenera i przekazywanie użytkownikowi.

✔ Pozwala na przechodzenie przez

kontener bez względu na jego strukturę wewnętrzną.

✔ Możliwość podmieniania kontenera

(44)

Wspólny Przodek

1.W Javie wszystkie obiekty dziedziczą po wspólnej klasie bazowej Object.

2.To gwarantuje że wszystkie obiekty posiadają pewne niezbędne funkcje, np. możliwość zapisu i odczytu obiektu z dysku.

(45)

Rzutowanie w Dół

Umieszczanie/odzyskanie obiektu z

kontenera. Tracimy informacje o klasie. Rzutowanie:

1.w górę – z klasy potomnej na bazową, bezpieczne.

2.w dół – z klasy bazowej na potomną, niebezpieczne.

(46)

Odśmiecacz Pamięci

Odśmiecacz pamięci:

✔ wykrywanie które obiekty sa

nieużywane

✔ zwalnianie pamięci po tych obiektach

Upraszcza problemy projektowe, zapobiega przeciekom pamięci.

Cena: nieprzewidywalność czasu

(47)

Obsługa Wyjątków

Obsługa błędów wymuszona przez język programowania:

✔ wyjątek jest obiektem

✔ sygnalizowany z miejsca błędu

✔ przechwytywany przez odpowiednią

procedurę obsługi

Alternatywna ścieżka sterowania

(48)

Współbieżność

✔ wielowątkowość: kilka wykonań

równoległych

✔ wielowątkowość jest częścią języka ✔ wątek jest obiektem

✔ blokowanie obiektów współdzielonych

✔ programowanie niezależne od

(49)

Trwałość

✔ obiekt istnieje tak długo jak go

potrzebujemy, ale nigdy dłużej niż wykonanie programu

✔ obiekty trwałe są zapisywane, a

następnie odczytywane z dysku

✔ obiekty trwałe przechowują wartość

Cytaty

Powiązane dokumenty

Nieruchomy ładunek, umieszczony w pewnej przestrzeni, przyczynia się do powstania w przestrzeni pola elektrostatycznego (rys. a), sam zaś podlega działaniu pola

Dla mnie osobiście wydobycie tego, jak z uniwersalnej na- ukowej refl eksji o człowieku wyłaniały się szkoły narodowe, jak wyłaniały się poddyscypliny, co działo się

o książka - tytuł, autor, wydawca, czas wydania, rodzaj publikacji, forma, objętość itp., o spektakl teatralny - tytuł, autor, reżyser, aktorzy, miejsce wystawienia

Niech Σ = {0, 1} oraz niech L będzie językiem nad alfabetem Σ będącym zbiorem wszystkich łańcuchów, w których każdy podłańcuch zawierający dwa lub więcej

// utworzono tablicę 10 referencji typu String, należy dla każdego elementu tablicy przydzielić pamięć.  Przydział pamięci na elementy obiektowe

// utworzono tablicę 10 referencji typu String, należy dla każdego elementu tablicy przydzielić pamięć.  Przydział pamięci na elementy obiektowe

Wyobrazimy sobie teraz, że w każdym punkcie, gdzie przecinają się pręty miernicze, znajduje się malutki zegar, którego wskazanie obserwator może odczytać dzięki światłu,

 W części drugiej należy skopiować pliki rejestru z folderu ich kopii zapasowej utworzonej przy użyciu narzędzia Przywracanie systemu. Ten