Programowanie obiektowe
na przykładzie języka C++
Celem tego wykładu jest nauka programowania obiektowego, a nie nauka
języka C++. Ale bez paniki: języka C++ nauczymy się przy okazji .
Piotr Białas
pok 443, tel 5571
pon. 1100-1200, śr. 1000-1100
pbialas@th.if.uj.edu.pl
wykład 1
1 Programowanie obiektowe Piotr Białas
Wykład 1
Wstęp teoretyczno filozoficzny
Proces konstrukcji oprogramowania
Składniki podejścia obiektowego
Co to jest obiekt i klasa
C++
Definiowanie klas i obiektów
Cykl życia obiektu (tworzenie i niszczenie)
wykład 1
2 Programowanie obiektowe Piotr Białas
Proces konstrukcji oprogramowania
Analiza
Odpowiedz na pytanie co?
Projektowanie
Odpowiedz na pytanie jak?
Kodowanie (programowanie)
Implementacja powyższej odpowiedzi
Podejście obiektowe można (a właściwie należy) stosować na każdym z
tych etapów.
wykład 1
3 Programowanie obiektowe Piotr Białas
Programowanie obiektowe
Heaven is not a place, heaven is a feeling.
Programowanie obiektowe to nie jest programowanie w języku obiektowym, to
pewien sposób myślenia.
Programowanie obiektowe to metoda implementacji w której programy są
zorganizowane jako zbiór współpracujących obiektów, każdy z których jest
instancją pewnej klasy i które to klasy połączone są ze sobą związkami
hierarchi dziedziczenia.
Grady Booch, Object Oriented Analysis and Design
wykład 1
4 Programowanie obiektowe Piotr Białas
Przerwa semantyczna
tytuł
C++
reżyser
nr
C
DVD
Fortran
asembler
mikrokod
Wyabstrachowane przez nas pojęcia
bramki logiczne
musimy zareprezentować w
komputerze
wykład 1
5 Programowanie obiektowe Piotr Białas
Zmniejszanie przerwy semantycznej
Przerwę semantyczną możemy zmiejszać
Od góry (dostosowywując się do komputera)
Definiując prostsze abstrakcje tak aby można je było
łatwo implementować
Od dołu (dostosuwywując komputer do nas)
używając języków programowania wyższego poziomu
używając architektury warstwowej
wykład 1
6 Programowanie obiektowe Piotr Białas
Architektura warstwowa
Każda warstwa reprezentuje wyższy poziom abstrakcji
Widgety
Xlib
C/C++
Asembler
wykład 1
7 Programowanie obiektowe Piotr Białas
Języki programowania
Każdy język programowania posiada zestaw abstrakcji
które są w nim łatwe do wyrażenia
Fortran (Formula Translator)
wzory matematyczne
podprocedury (dekompozycja funkcyjna)
Algol, C
struktury
Simula, C++, Java
obiekty
Lisp (LISt Procesor)
listy
wykład 1
8 Programowanie obiektowe Piotr Białas
Języki programowania
Teoretycznie wszystkie języki są równoważne (Turing) ale każdy język
programowania wnosi ze sobą zespół naturalnych dla niego pojęć służacych
do opisu (dekompozycji) problemu
wykład 1
9 Programowanie obiektowe Piotr Białas
Składniki podejścia obiektowego
Abstrakcja
Enkapsulacja
Hierarchia
System typów
Te pojęcia istaniały przed pojawieniem się języków obiektowych,
dopiero języki obiektowe dały im praktyczne wsparcie
wykład 1
10 Programowanie obiektowe Piotr Białas
Abstrakcja
Umiejętność wydrębnienia cech istotnych dla danego problemu
DVD
Tytuł
Reżyser
nr
Wypożyczający
Imię
Nazwisko
Adres
Data ur.
nr Klienta
wykład 1
11 Programowanie obiektowe Piotr Białas
Abstrakcja
Stos
1
int pop()
3
push(int)
1
int jestPusty()
5
7
Stos to coś na czym można wykonywać
7
operacje pop i push
wykład 1
12 Programowanie obiektowe Piotr Białas
Enkapsulacja
Użyteczna abstrakcja w praktyce musi być niezależna
od swojej implementacji. Osiągamy to poprzez
Rozdzielenie interfejsu od implementacji
Jest to jedna z podstawowych zasad projektowych nie
tylko w podejściu obiektowym
ale języki obiektowe dają nam wygodne mechanizmy do
tego celu
wykład 1
13 Programowanie obiektowe Piotr Białas
Hierachia
Złożone systemy składają się z podsystemów (często identycznych lub
podobnych)
Te podsystemy tworzą najróżniejsze powiązania ale najczęściej spotykamy
dwa typy hierarchi
Część-całość - jest częścią , zawiera
Dziedziczenia - jest czymś
Osoba
Hierarchia cześć całość możliwa była do
prostego zaimplementowania w
nieobiektowych językach programowania.
Dziedziczenie przyszło wraz z językami
Wypożyczający
obiektowymi
wykład 1
14 Programowanie obiektowe Piotr Białas
Dziedziczenie i interfejsy
Są dwa głowne powody dziedziczenia:
Dla interfejsu
Klasa dziedzicząca może być użyta wszędzie tam
gdzie klasa dziedziczona
Dla implementacji
Klasa dziedzicząca wykorzystuje i/lub rozszerza
działanie klasy dziedziczonej
Można używać obu na raz
wykład 1
15 Programowanie obiektowe Piotr Białas
System typów
W językach posiadających system typów każda zmienna
ma określony typ
Jeśli typ zmiennej jest znany podczas kompilacji to
kompilator może nam zabronić wykonywania
niekonsystentnych operacji
Jeśli typ zmienej określany jest podczas wykonania to
wynik wywołania operacji na tej zmiennej może zależeć
od jej typu (polimorfizm).
wykład 1
16 Programowanie obiektowe Piotr Białas
System typów w C++
W C++ mamy do czynienia z podejściem mieszanym:
w zasadzie każda zmienna ma typ określony podczas
kompilacji ale można do niej podstawiać obiekty innych
typów będacych pochodnymi jej typu (połączonymi
hierarchią dziedziczenia).
wykład 1
17 Programowanie obiektowe Piotr Białas
Obiekt i klasa
Obiekt to coś co posiada
Stan
Zmienne/atrybuty
Zachowanie
Metody/funkcje
Tożsamość
Osobny obszar pamięci
Klasa określa strukturę obiektu. Jest to matryca do
produkcji obiektów
wykład 1
18 Programowanie obiektowe Piotr Białas
Stan
Stan jest określony przez listę posiadanych atrybutów
(własności), zwykle statyczną i zdefiniowaną w klasie
do której należy dany obiekt
oraz wartości tych atrybutów które zmieniają się w
trakcie życia obiektu
wykład 1
19 Programowanie obiektowe Piotr Białas
Zachowanie
Zachowanie określone jest przez listę metod (funkcji)
które możemy wywołać na danym obiekcie
Wynik wywołania metody zależy od stanu obiektu
Stan obiektu może zostać zmieniony przez wywołanie
metody
wykład 1
20 Programowanie obiektowe Piotr Białas
Tożsamość
Każdy obiekt jest różny od innego obiektu, nawet jeśli
posiada identyczny stan
Nie należy mylić obiektu z jego nazwą (zmienną)
Aby zachować tożsamość obiektu należy zwracać
baczną uwagę na operacje przypisanie i kopiowania
wykład 1
21 Programowanie obiektowe Piotr Białas
Unified Modeling Language
wykład 1
22 Programowanie obiektowe Piotr Białas
Klasa w C++ - definicja/deklaracja
#ifndef _stosint_
#define _stosint_
stosint.h
#include
using namespace std;
static const size_t STACK_SIZE = 100;
class StosInt {
private:
int _rep[STACK_SIZE];
size_t _top;
public:
StosInt():_top(0) {};
int jestPusty();
int pop();
void push(int);
};
#endif
wykład 1
23 Programowanie obiektowe Piotr Białas
Klasa C++ - implementacja
#include"stosint.h"
stosint.cpp
int StosInt::jestPusty() {
return !_top;
}
int StosInt::pop() {
return _rep[--_top];
}
void StosInt::push(int element) {
_rep[_top++]=element;
}
wykład 1
24 Programowanie obiektowe Piotr Białas
Klasa C++ - użycie
#include stosik.cpp
using namespace std;
#include"stosint.h"
main()
{
StosInt stosik;
stosik.push(27);stosik.push(34);stosik.push(78);
while(!stosik.jestPusty()) {
cerr< }
}
wykład 1
25 Programowanie obiektowe Piotr Białas
C++ - kompilacja i wykonanie (Linux)
> g++ -o stosik stosik.cpp stosint.cpp
> stosik
78
34
27
wykład 1
26 Programowanie obiektowe Piotr Białas
C++ - enkapsulacja
#include
using namespace std;
#include"stosint.h"
main()
{
StosInt stosik;
if(stosik._top > 0)
{
cerr<<"stos niepusty"< }
}
wykład 1
27 Programowanie obiektowe Piotr Białas
C++ - enkapsulacja
stosint.h: In function `int main()':
stosint.h:13: error: `size_t StosInt::_top' is
private
zly.cpp:11: error: within this context
wykład 1
28 Programowanie obiektowe Piotr Białas
Tworzenie obiektów
Obiekt jest tworzony za pomocą konstruktora. Jeśli nie
zdefiniujemy własnego konstruktora to kompilator
wygeneruje standardowy konstruktor który wywoła po
kolei standardowe konstruktory wszystkich składowych
obiektu
Możemy zdefiniować kilka konstruktorów. O tym który
konstruktor zostanie wykorzystany zadecydują
przekazane mu parametry (przeładowanie)
wykład 1
29 Programowanie obiektowe Piotr Białas
Niszczenie obiektów
Przed zniszczeniem obiekty wywoływany jest
destruktor, podobnie jak w przypadku konstruktora jeśli
nie zdefinujemy własnego destruktora (może być tylko
jeden) to wywoływany jest destruktor standardowy
który po kolei niszczy składowe obiektu i zwalnie
przydzieloną mu pamięć
UWAGA! Destruktor standardowy nie zwalnie pamięci
przydzielanej dynamicznie. Konieczność zwolnienia
przydzielonej dynamicznie pamięci to najczęstszy
powód pisania własnego destruktora
wykład 1
30 Programowanie obiektowe Piotr Białas
Stos dynamiczny
#ifndef _stosdyn_
#define _stosdyn_
#include
using namespace std;
class DynamicznyStosInt {
private:
int *_rep;
size_t _top;
public:
DynamicznyStosInt(size_t n):_top(0) {_rep= new int[n]; };
int jestPusty();
int pop();
void push(int);
~DynamicznyStosInt() {delete [] _rep;}
};
#endif
wykład 1
31 Programowanie obiektowe Piotr Białas
Stos dynamiczny
#include
#include"stosdyn.h"
using namespace std;
main()
{
DynamicznyStosInt stosik(1000);
DynamicznyStosInt stosik; //niepoprawne
for(int i = 0;i<200000;i++)
{
DynamicznyStosInt *s= new DynamicznyStosInt(1000);
s->push(1);
delete s;
}
}
wykład 1
32 Programowanie obiektowe Piotr Białas
Wyszukiwarka
Podobne podstrony:
wyklad3 print
2012 AMI wyklad print cz1
2007 AMI wyklad print 1 7
2007 AMI wyklad print
wyklad4 print
Print Wyklad 1 Chemia jako nauka
Sieci komputerowe wyklady dr Furtak
Wykład 05 Opadanie i fluidyzacja
WYKŁAD 1 Wprowadzenie do biotechnologii farmaceutycznej
mo3 wykladyJJ
ZARZĄDZANIE WARTOŚCIĄ PRZEDSIĘBIORSTWA Z DNIA 26 MARZEC 2011 WYKŁAD NR 3
więcej podobnych podstron