Programowanie obiektowe III rok EiT - PowerPoint PPT Presentation

About This Presentation
Title:

Programowanie obiektowe III rok EiT

Description:

Programowanie obiektowe III rok EiT dr in . Jerzy Kotowski Wyk ad VIII Program wyk adu r d a podej cia obiektowego Podstawy metody PRINCE -PRojects In ... – PowerPoint PPT presentation

Number of Views:45
Avg rating:3.0/5.0
Slides: 18
Provided by: Jerz3
Category:

less

Transcript and Presenter's Notes

Title: Programowanie obiektowe III rok EiT


1
Programowanie obiektoweIII rok EiT
  • dr inz. Jerzy Kotowski
  • Wyklad VIII

2
Program wykladu
  • Zródla podejscia obiektowego
  • Podstawy metody PRINCE -PRojects In Controlled
    Environment
  • Podstawy metody LFA -Logical Framework Approach,
    skladanie wniosków o grant
  • Jezyk C - gadzety jezyka, polimorfizm, klasy,
    dziedziczenie
  • Gadzety jezyka C c.d., klasy
  • Przyklad problemu
  • Podstawy jezyka JAVA
  • Klasówka

3
Literatura
  • C for C programmers, Ira Pohl, The
    Benjamin/Cummings Publishing Company, Inc.
  • Symfonia C, Jerzy Grebosz, Oficyna Kallimach,
    Kraków 1999

4
Operatory new i delete Visual Studio test0.sln
  • new - operator jednoargumentowy. Bardziej
    uzyteczny od malloc i calloc. Operator sluzy do
    sterowania pamiecia o nazwie free store.
  • Do niszczenia obiektów zalozonych przy pomocy
    operatora new sluzy operator delete. Przy pomocy
    operatora delete mozna zniszczyc wylacznie obiekt
    zalozony przy pomocy operatora new.
  • Oznacza to w szczególnosci, ze twór zalozony przy
    pomocy funkcji malloc musi byc niszczony przy
    pomocy funkcji free.
  • Skladnia operatora newnew type-namenew
    type-name initializer
  • W kazdym z powyzszych przypadków operator new
    rezerwuje odpowiednia ilosc pamieci i zwraca
    adres typu void do zarezerwowanego obszaru.
  • Skladnia operatora deletedelete
    expressiondelete expression
  • Operator delete nic nie zwraca, w takim
    znaczeniu, ze zwraca void.
  • Przyklad dynamiczna alokacja tablicy
    dwuwymiarowej.
  • Program tablica1.cpp

5
Fragment programu
void main(void) // Dynamiczna alokacja tablicy
dwuwymiarowej int data int sz1,sz2 cout
ltlt "\nEnter two sizes " cin gtgt sz1 gtgt sz2 //
Oddzielamy Enterem lub dowolna liczba
spacji datanew int sz1// alokacja tablicy
wskazników do liczb int for(int
i0iltsz1i) datainew intsz2 cout ltlt
"\nEnter " ltlt sz1 ltlt " by " ltlt sz2 ltlt "
ints\n" int j // Kompilator nie pozwolil na
deklaracje w wewnetrznej petli for(i0iltsz1i)
for(j0jltsz2j) cin gtgt dataij cout
ltlt "\nResult\n\n" for(i0iltsz1cout ltlt
"\n",i) for(j0jltsz2j) cout ltlt
dataij ltlt "\t" getch()
6
Ciekawe punkty programu tablica1.cpp
  • Przy wprowadzaniu grupy danych za pomoca
    operatora cin kolejne pozycje oddzielamy dowolna
    liczba spacji lub klawiszem Enter.
  • Adres data ustawiamy na wartosc zwracana przez
    operator new datanew int sz1 - rozmiar
    zajetego obszaru jest zatem zalezny od modelu
    pamieci i jest równy sz1 rozmiar_jednego
    wskaznika.
  • Operator new mozna oczywiscie wykorzystywac w
    skladni int i i new int
  • Wszystkie elementy tablicy data (czyli wskazniki)
    ustawiamy na wskazania do obszarów, w których
    zapamietywane beda kolejne wiersze tablicy
    datainew intsz2
  • Wykorzystanie jak przy klasycznej tablicy cin
    gtgt dataijcout ltlt dataijdata123
  • Operator przecinkowy for(i0iltsz1cout ltlt
    "\n",i)

7
Unie anonimowe ..\..\Visual Studio
Projects\test0\test0.sln
  • Unia anonimowa to taka, która jest deklarowana
    bez etykiety (tag name).
  • C pozwala na bezposredni dostep do skladowych
    takiej unii. W zwiazku z tym nazwy pól powinny
    róznic sie od nazw innych zmiennych znajdujacych
    sie w tym samym horyzoncie zdarzen (obszarze
    waznosci nazwy).
  • Program unia anonimowa.cpp

static union int i char c8 double
w //kompilator domagal sie typu static void
main(void) w3.14 cout ltlt " i " ltlt i ltlt
endl i49 cout ltlt "c0 " ltlt c0 ltlt
endl i cout ltlt "c0 " ltlt c0 ltlt
endl getch()
8
Klasy - wprowadzenie
  • W jezyku C struktura moze miec funkcje skladowe
    metody skladowe member functions. Struktura
    moze miec równiez pola opisane jako private.
    Konsekewncja jest koncepcja klasy - class, która
    jest struktura z domniemana widzialnoscia
    private.
  • Modyfikatory widzialnosci (dostepu)publicprivat
    eprotected
  • Private parts sa ukryte przed client code.
  • Podejscie projektowe oparte na idei OOP sprowadza
    sie do projektowania odpowiednich ADT (Abstract
    Data Type).
  • Dobrze zaprojektowany ADT oddaje nie tylko
    kluczowe wlasnosci modelowanego procesu ale moze
    byc czesto z powodzeniem stosowany w innym kodzie
    zródlowym.
  • Struktura (klasa) ma komponenty o nazwie members.
  • Etykieta struktury jest typem (nazwa typu
    obiektowego).
  • Structure member operator daje dostep do
    poszczególnych skladników struktury. Skladnia
    structure_variable.member_name
  • member_name musi byc unikalne w obrebie danej
    struktury. Nazwy pól róznych struktur moga byc
    identyczne.

9
Zakres waznosci nazwy obiektu a jego czas zycia
  • Czas zycia obiektu to okres od momentu gdy
    zostanie mu przydzielone miejsce w pamieci
    (definicja, C) do momentu, gdy to miejsce
    zostaje zwolnione.
  • Zakres waznosci nazwy obiektu to ta czesc
    programu, w której ta nazwa znana jest
    kompilatorowi.
  • Przyklad void Ala(void) static float x
  • Zakresy waznosci
  • Lokalny swiadomie ograniczamy go do kilku
    linijek programu (blok, wnetrze definicji
    funkcji).
  • Blok funkcji zakres waznosci ograniczony do
    bloku funkcji ma etykieta.
  • Obszar pliku jezeli program sklada sie z kilku
    plików i w jednym z nich, na zewnatrz
    jakiegokolwiek bloku (takze bloku funkcji)
    zadeklarujemy jakas nazwe, to mówimy wówczas, ze
    taka nazwa jest globalna. Ma ona zakres waznosci
    pliku i jest znana od miejsca, gdzie znalazla sie
    deklaracja do konca pliku. Nazwa globalna nie
    jest automatycznie znana w innych plikach.
  • Obszar klasy nazwa uzyta do zadeklarowania
    jakiejs skladowej klasy jest znana przez
    wszystkie inne skladowe tej klasy.

10
Stack - stos
  • Idea przykladu przeksztalcamy definicje stosu z
    postaci strukturalnej na postac obiektowa.
  • Stos jest jedna z bardziej uzytecznych struktur
    danych.
  • Stos jest struktura, która pozwala na skladowanie
    i kasowanie tylko jednego elementu znajdujacego
    sie na szczycie stosu.
  • System obslugi stosu nosi nazwe LIFO.
  • Typowe operacje, które mozna dokonywac na stosie
    to push, pop, top, empty oraz full
  • Operator push sklada wartosc na stosie
  • Operator pop pobiera wartosc ze stosu
  • Operator top zwraca wartosc znajdujaca sie na
    szczycie stosu
  • Operator empty sprawdza czy stos jest pusty
  • Operator full sprawdza, czy stos jest pelny.
  • Stos jest typowym ADT.
  • W postaci strukturalnej stos jest organizowany na
    obszarze pamieci o sztywnym rozmiarze. Szczyt
    stosu wskazuje skladnik (member) o nazwie top.
    Poszczególne operacje dokonywane na stosie sa w
    programie zródlowym zdefiniowane jako funkcje,
    których jednym z argumentów jest wskaznik do
    obiektu typu stack.

11
Stos - wersja strukturalna
  • Struktura stack ma dwa pola typu public. Pole s
    ma rozmiar max_len deklarowany jako const int.
  • Na poczatku programu jest równiez deklarowany
    nowy typ Boolean przy pomocy slowa kluczowego
    enum. Stala False jest inicjalizowana na 0 a
    stala True na 1.
  • Funkcja reset jest wykorzystywana do
    inicjalizacji. Ustawia wskaznik stosu na 0.
    Argumentem funkcji jest adres do struktury typu
    stack.
  • Funkcja push ma dwa argumenty co oraz gdzie.
    Zaklada sie, ze stos nie jest pelny. Wpierw
    zwiekszamy wskaznik stosu. Nastepnie podstawiamy
    pod ten adres pierwszy argument funkcji.
  • W funkcji pop jest zmniejszenie wskaznika stosu
    po pobraniu wartosci.

const int max_len1000 enum Boolean
False,True struct stack char
smax_len int top void reset(stack
stk) stk-gttop0 void push(char c,stack
stk) stk-gttop stk-gtsstk-gttopc c
har pop(stack stk) return(stk-gtsstk-gttop--
)
12
Stos - wersja strukturalna, c.d.
char top(stack stk) return(stk-gtsstk-gttop
) Boolean empty(stack stk)
return((Boolean)(stk-gttop0)) //dodano
rzutowanie na typ Boolean Boolean full(stack
stk) return((Boolean)(stk-gttopmax_len-1))
// dodano rzutowanie na typ Boolean
  • W funkcji top nie ma zmniejszenia wskaznika stosu
    po pobraniu wartosci.
  • Funkcje empty oraz full zwracaja wartosc typu
    Boolean. Arrgumentami sa adresy do obiektu typu
    stack.

13
Stos - client code ..\..\Visual Studio
Projects\test0\test0.sln
void main(void) stack s static char
str40"Elektronika i Telekomunikacja" int
i0 cout ltlt str ltlt endl reset(s) while((str
i)(!full(s))) push(stri,s) while(!em
pty(s)) cout ltlt pop(s) cout ltlt
endl getch()
  • W segmencie main tekst str jest zrzucany na stos
    s a nastepnie sciagany ze stosu i drukowany na
    ekranie. Drukowanie w odwrotnej kolejnosci.
  • Obie petle wykorzystuja konstrukcje while.
  • Wszystkie funkcje do obslugi stosu wywolywane w
    segmencie main jako jeden ze swoich argumentów
    adres do stosu s
  • Program stos strukturalny.cpp.

14
Stos wersja obiektowa, opis
  • W wersji obiektowej funkcje do obslugi stosu
    staja sie funkcjami skladowymi klasy.
  • Member functions sa traktowane jako skladowe
    struktury (klasy).
  • Dostep do nich jest identyczny jak do wszystkich
    innych skladowych.
  • Do dotychczasowych funkcji do obslugi stosu
    zostanie dodanych kilka nowych.
  • Przy okazji zostanie zaprezentowany i
    wykorzystany mechanizm przeciazania funkcji.
  • Pewne funkcje beda definiowane jako inline,
    definicje innych znajda sie poza klasa a w samej
    definicji klasy znajda sie wylacznie ich
    deklaracje prototypowe.

15
Stos - wersja obiektowa
const int max_len1000 enum Boolean
False,True class stack char
smax_len int top public void
reset() top 0 // definition void
push(char c) // function prototype char
pop() return (stop--) char pop(int
n) // overloading, prototype char top_of()
return (stop) Boolean empty() return
((Boolean)(top 0)) Boolean empty(int
n) // overloading, prototype Boolean full()
return ((Boolean)(top max_len - 1 ))
  • Member functions maja bezposredni dostep przez
    member_name do wszystkich skladowych swojej klasy
    - nawet do skladowych ukrytych.
  • Funkcja skladowa top zmienila nazwe na top_of aby
    nie bylo konfliktu nazw (pole top).
  • Nazwy pop i top sa przeciazone.

16
Stos - wersja obiektowa, funkcje skladowe
void stackpush(char c) top stop
c // definicja skladowej poza klasa char
stackpop(int n) while(n--gt1) top-- return
(stop--) Boolean stackempty(int n)
return ((Boolean)(top-n1 lt 0)) // True,
jezeli jest mniej niz n elementów
  • Pelna nazwa funkcji definiowanej poza klasa ma
    postacnazwa_klasynazwa_funkcji
  • void stackpush(char c) - definicja skladowej
    poza klasa
  • Przeciazona funkcja pop(int n) zwraca n-ty
    element ze stosu.
  • Przeciazona funkcja empty(int n) zwraca True,
    jezeli na stosie jest mniej niz n elementów

17
Stos - client code ..\..\Visual Studio
Projects\test0\test0.sln
void main(void) stack s char str50
"Instytut Informatyki, Automatyki i
Robotyki" int i 0 cout ltlt str ltlt
endl s.reset() while (stri) if
(!s.full()) s.push(stri) while(!s.empty(2
)) // print the rewerse cout ltlt s.pop(2) //
drukujemy od konca co drugi element cout ltlt
endl getch()
  • W segmencie main tekst str jest zrzucany na stos
    s a nastepnie sciagany ze stosu i drukowany na
    ekranie. Drukujemy co drugi element w odwrotnej
    kolejnosci.
  • Funkcje skladowe sa czytelniejsze - nie maja
    argumentów.
  • Program stos obiektowy.cpp
Write a Comment
User Comments (0)
About PowerShow.com