wyklad1 print


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