background image

 

 

Programowanie 

obiektowe

PO

PO - LAB 1
Wojciech Pieprzyca

 

background image

 

 

• Programowanie obiektowe

 pozwala nam 

posługiwać się rzeczywistymi pojęciami, które 

znamy z codziennego życia.

• Nie musimy zatem odwoływać się do określonej 

specyfiki języka maszynowego, ani też nawet do 

jego bardziej abstrakcyjnych wersji (ale nadal 

odległych od rzeczywistości, która nas otacza).

• Obiektowość upraszcza nie tylko samo 

programowanie, ale także fazę projektowania 

oprogramowania. Pojęciem kluczowym dla tego 

sposobu programowania jest 

obiekt

1. Wstęp

PO

background image

 

 

2. Czym jest obiekt ?

• Obiekt

 jest tworem abstrakcyjnym jednak w dużym 

stopniu odzwierciedlającym rzeczywistą 

charakterystykę i działanie maszyn, ludzi, organizacji, 

itp.

• Z obiektem możemy utożsamiać 3 cechy:

a) 

stan

 - dane opisujące obiekt tzw. składowe czyli 

informacje które obiekt ZNA,
b) 

zachowanie

 - funkcje jakie może wykonywać 

obiekt tzw. metody, czyli zachowania które obiekt 

WYKONUJE,
c) 

tożsamość

 - pozwala na jednoznaczne 

odróżnianie obiektów od siebie.

PO

background image

 

 

3. Klasy

• Klasa

 jest pojęciem pierwotnym dla 

obiektu ponieważ każdy obiekt jest 

reprezentantem jakiejś klasy obiektów 

(czyli, że obiekty powstają na podstawie 

wcześniej zdefiniowanego opisu klasy). 

Klasa grupuje obiekty tego samego 

rodzaju, posiadające tę samą strukturę.

• Klasę możemy wyobrazić sobie jako 

matrycę

 służącą do tworzenia obiektów. 

W ten sposób informujemy kompilator 

jakie składowe i jakie metody zawiera 

dana klasa, a co za tym idzie 

poszczególne obiekty, które są związane 

z daną klasą.

PO

o1

o2

o3

o4

KLASA

OBIEKTÓW

background image

 

 

4. Przykład klasy

• Rozpatrzmy klasę 

samochód

. Jak wiemy 

każdy obiekt typu samochód posiada dość 

podobną charakterystykę i funkcjonalność.

• Przykładem 

opisu

 klasy samochód może 

być kolor, masa, rodzaj silnika, elementy 

wyposażenia, itp. Jako 

funkcje

 (metody) 

możemy z kolei wyróżnić: zmianę 

prędkości, zmianę biegu, hamowanie, 

przyspieszanie, itp. 

• Mamy więc klasę samochód na postawie 

której możemy stworzyć 

obiekty

 tej klasy, 

a więc konkretne wystąpienia klasy takie 

jak np. Ford, Mercedes, Honda, itp.

PO

background image

 

 

5. Dziedziczenie

PO

• Dziedziczenie 

polega na tworzeniu klas (tzw. 

klas potomnych) na podstawie klas bardziej 

ogólnych (tzw. klas bazowych). 

Klasa potomna

 

dziedziczy wszystkie metody oraz składowe 

klasy bazowej

. W podanym przykładzie klasy 

Focus, Ka i Mondeo dziedziczą te elementy po 

klasie Ford. Dodatkowo każda z klas potomnych 

może mieć własne składowe i metody, nie 

związane z klasą bazową.

background image

 

 

6. Komunikacja obiektów

PO

• W sposób uproszczony możemy przyjąć, że 

program 

obiektowy składa się z wielu obiektów 

komunikujących się między sobą

, wymieniających 

informacje i wywołujących wzajemnie swoje metody. 

Musi zatem istnieć odpowiedni mechanizm 

komunikacji obiektów. 

• Obiekty zwykle komunikują się poprzez wywołanie 

metod

 publicznych, tzn. takich które są dostępne 

spoza samego obiektu macierzystego.

• W przykładzie widzimy, ze
     obiekt kierowca wywołuje 
     metodę publiczną zmianaBiegu 
     obiektu samochód.

background image

 

 

7. Enkapsulacja 

(I)

PO

• Enkapsulacja jest próbą 

ukrycia

 niektórych 

skladowych i metod obiektu przed dostępem z 

zewnątrz (czyli przez inne obiekty).

• Dobrym zwyczajem jest pisanie dla wszystkich 

skladowych (zmiennych) do których istnieje potrzeba 

dostania się z zewnątrz obiektu, odpowiednich 

metod 

dostępowych

.

• Na przykład dla zmiennej int liczba, napisalibyśmy 

dwie metody dostępowe ustawLiczbe(int x) 

ustalającą wartość zmiennej na podaną wartość x i 

pobierzLiczbe() zwracającą aktualną wartość liczby.

• Taki sposób programowania chroni składową x przed 

bezpośrednim dostępem i ingerencją z zewnątrz. 

Dzięki temu w metodach dostępowych można 

kontrolować sposób zmiany tej wartości.

background image

 

 

Enkapsulacja 

(II)

PO

• Ze względu na możliwy dostęp wyróżniamy 3 rodzaje 

składowych:

1) 

prywatne

 (private) – przeznaczone wyłącznie do 

użytku wewnątrz danej klasy

2) 

publiczne

 (public) – dostęp do nich jest 

nieograniczony, tzn. możliwy zarówno w ramach 

klasy jak i spoza niej,

3) 

chronione

 (protected) – dostępne wewnątrz danej 

klasy, ale również dla klas potomnych (patrz 

dziedziczenie) oraz
klas i metod zaprzyjaźnionych (o tym powiemy 

później).

background image

 

 

8. Pierwszy program 

(I)

 

PO

• W celu napisania programu skorzystamy z darmowego 

kompilatora 

Dev C++

. Po uruchomieniu programy 

wybieramy ikonę     , aby utworzyć nowy projekt.

background image

 

 

Pierwszy program 

(II)

 

PO

• Dalej wybieramy opcję 

Console Application

 i wpisujemy 

nazwę nowego projektu, oraz jeszcze raz zatwierdzamy 

podaną nazwę.

background image

 

 

Pierwszy program 

(III)

 

PO

• Po uruchomieniu konsoli automatycznie 

generowany jest 

szkielet programu

,

• Zawiera on 

dyrektywy kompilatora

 

(rozpoznamy je po tym, że zaczynają się 
od znaku 

#

), podstawowa dyrektywa 

kompilatora taka jak np. 

include

 pozwala 

na dołączenie 

plików nagłówkowych

 (czyli 

deklaracji funkcji bibliotecznych, które 
będą nam potrzebne podczas pisania 
programów). Przykładem pliku 
nagłówkowego jest 

iostream.h

.

background image

 

 

Pierwszy program 

(IV)

 

PO

• Na początku będą nam potrzebne funkcje 

biblioteczne z 2 plików nagłówkowych:

– cstdlib 

– standardowa biblioteka C, 

którą domyślnie dołącza kompilator 

Dev C++,

– iostream

 – biblioteka wejścia/wyjścia, 

pozwala m.in. wyświetlać informacje 

na strumieniu wyjściowym (np. 

monitorze) i pobierać dane ze 

strumienia wejściowego (np. 

klawiatury),

background image

 

 

Pierwszy program 

(V)

 

PO

• Każdy program w języku C obowiązkowo 

zawiera funkcję 

main

. Jest to główna 

funkcja programu od której rozpoczyna 
się proces wykonywania programu.

• Treść każdej funkcji (tzw. ciało programu) 

zawiera się w obszarze ograniczonym 
przez dwa 

nawiasy klamrowe

.

{

….. (ciało)

}

background image

 

 

Pierwszy program 

(VI)

 

PO

• Pierwszy program będzie wyświetlał 

powitanie na ekranie.

• //dyrektywy dotyczące plików nagłówkowych

#include <cstdlib>
#include <iostream>

//definicja funkcji main

int main(int argc, char* argv[])
{

   //wyświetlenie napisu na ekranie i przejście do nowej linii

  cout << ”Witaj w swoim pierwszy programie!” << endl;

  //oczekiwanie na naciśnięcie klawisza

 

  system(”PAUSE”);

        return EXIT_SUCCESS;

}

background image

 

 

Pierwszy program 

(VII)

 

PO

• Uwagi do programu:

- niektóre linie kodu poprzedzone znakami 

// 

stanowią 

komentarz

 i nie są brane pod uwagę w czasie kompilacji 

programu,
- funkcja 

main

 zawiera 

argumenty wejściowe i wyjściowe

ponieważ jednak tworzona jest ona automatycznie przez 

środowisko Dev C++ to na razie pominiemy ten aspekt i 

wrócimy do jego omówienia w rozdziale dotyczącym 

funkcji,
- jedyną linią kodu do samodzielnego wpisania jest ta z 

instrukcją 

cout

 powodującą wysłanie tekstu przekazanego 

po operatorze 

<<

 na domyślny strumień wyjściowy (zwykle 

monitor). Tekst jawny używany w programie musi zostać 

objęty apostrofami. Instrukcja 

endl

 wymusza przejście do 

nowej linii,
- instrukcja 

system(”pause”)

 powoduje zatrzymanie 

programu aż do naciśnięcia klawisza przez użytkownika,

return

 w tym przypadku zawraca kod pomyślnego 

zakończenia funkcji.

background image

 

 

9. Jak skompilować program ? 

(I)

 

PO

• W celu kompilacji programu należy nacisnąć 

klawisze 

CTRL+F9

. Zazwyczaj jednak 

będziemy jednocześnie chcieli skompilować 
program i go uruchomić (klawisz 

F9

).

• Kompilujemy program i…

background image

 

 

Jak skompilować program 

(II)

PO

KOMPILACJA

Sukces :-)

Porażka :-(

Nie pojawiają się 

komunikaty o błędach, 

pojawia się za to okno 

programu w trybie 

tekstowym.

Kompilator informuje nas o 

występujących błędach 

składni    i podświetla linie w 

której wystąpił pierwszy błąd

background image

 

 

10. Slowa kluczowe

PO

• Słowa kluczowe

 są integralną częścią skladni 

języka. Oznacza to, że są one 

zarezerwowane

 

i nie mogą być używane w innych celach niż 

to pierwotnie założono, nie można ich np. 

wykorzystać do nadawania nazw zmiennych 

czy funkcji.

• Przyklady slów kluczowych

:

asm, break, case, catch, char, class, const, 

continue, default, delete, do, double, else, 

enum, extern, float, for, friend, goto, if, inline, 

int, long, new, operator, private, protected, 

public, register, return, short, signed, sizeof, 

static, struct, switch, this, throw, try, typedef, 

unsigned, virtual, void, volatile, while

background image

 

 

11. Zmienne

PO

• Pod pojęciem 

zmiennej

 rozumiemy zwykle 

komórkę pamięci

, której rozmiar zależy od 

typu danej, którą chcemy w niej 

przechowywać. Inny będzie więc rozmiar 

zmiennej dla liczby całkowitej, a inny dla 

ciągu znaków.

• Każda zmienna posiada swój 

adres w 

pamięci

, jednak odwoływanie się do zmiennej 

poprzez adres byłoby dość kłopotliwe, 

dlatego też zmiennym można 

przyporządkować 

nazwy

. Nazwa składa się z 

ciągu liter i cyfr, nie może jednak zawierać 

„polskich liter”, spacji ani rozpoczynać się od 

cyfry. Nie może być oczywiście taka sama jak 

istniejące słowo kluczowe. W języku C 

rozróżniane są duże i male litery. 

background image

 

 

12. Typy danych

PO

• Tak jak już wspomnieliśmy każda zmienna w 

języku C musi mieć ściśle przyporządkowany typ 

danych.

• Wyróżniamy następujące 

podstawowe typy 

danych

:

Typ danych

Liczba bitów

Zakres wartości

char

8

-128:127 lub jeden znak 
ASCII

int

32

-2 147 483 648 : 2 147 483 
647

unsigned int

32

0 : 4 294 967 295

short int

16

-32 768 : 32 767

float

32

3,4*10

-38 

 : 3,4*10

38

double

64

2,2*10

-308

 : 1,8*10

308

background image

 

 

13. Przykładowy program 

(I)

PO

#include <cstdlib>
#include <iostream>
#include <math.h> 

//plik naglowkowy z funkcja sqrt

using namespace std;

int main(int argc, char *argv[])
{
    

//deklaracja zmiennych

    float a,b,c;
    float delta,x1,x2;
    

//pobranie danych z klawiatury

    cout << "Podaj a: ";
    cin >> a;
    cout << "Podaj b: ";
    cin >> b;
    cout << "Podaj c: ";
    cin >> c;
    

//obliczenie delty i pierwiastkow

    delta = b*b-4*a*c;
    x1 = (-b-sqrt(delta))/(2*a); 

//sqrt – pierwiastek 

kwadratowy

    x2 =  (-b+sqrt(delta))/(2*a);
    

//wypisanie wynikow na ekranie

    cout << "x1 = " << x1 << endl;
    cout << "x2 = " << x2 << endl;    
    system("PAUSE");
    return EXIT_SUCCESS;
}

background image

 

 

Przykładowy program (II)

PO

• Uwagi do programu:

– jak można latwo się zorientować program 

nie jest 

doskonaly

, nie sprawdza chociażby czy wskaźnik 

delta jest nieujemny co jest warunkiem istnienia 

rozwiązań równania kwadratowego, podobnie nie 

jest sprawdzane czy iloczyn w mianowniku 

wyrażenia na rozwiązania x1 i x2 jest niezerowy, w 

przypadku gdy a=0 uzyskamy błąd dzielenia przez 

zero,

– podobnie jak instrukcja cout służyła do 

wyprowadzenia wyników na ekran, tak instrukcja 

cin

 

służy do pobrania danych z klawiatury,

– ponieważ istniała konieczność użycia funkcji 

pierwiastkowania 

sqrt

, to konieczne było dołączenie 

funkcji bibliotecznych z pliku nagłówkowego 

math.h

,

– po zapoznaniu się z instrukcjami warunkowymi na 

następnym laboratorium będziemy mogli 

udoskonalić

 

program

.

background image

 

 

14. Ćwiczenia

PO

• Proszę wybrać sobie jakiś obiekt ze świata rzeczywistego 

(obiektem może być także część jakiejś organizacji, 

struktury, itp.), a następnie:

– określić składowe i metody występujące w klasie 

reprezentującej zbiór obiektów,

– zastanowić się które ze składowych i metod powinny mieć 

określony dostęp jako private a które mogą być public ?

• Proszę uruchomić środowisko Dev C++, utworzyć 

projekt, dopisać odpowiednią linię kodu i spróbować 

skompilować i uruchomić pierwszy podany program 

wyświetlający powitanie na ekranie.

• Proszę napisać program realizujący następujące zadania:

– pyta użytkownika o jego imię i wyświetla je na ekranie,

– następnie pyta użytkownika o długość boków a,b prostokąta 

(liczby całkowite), wylicza obwód (2a+2b) i pole (a*b) i 

wyświetla wynik na ekranie,

– następnie pyta użytkownika o promień kuli wylicza jej 

objętość (4/3*pi*r

3

) i pole powierzchni (4*pi*r

2

).


Document Outline