Laboratorium 1 - Kajetan Kurus

Transkrypt

Laboratorium 1 - Kajetan Kurus
Laboratorium 1 - Programowanie proceduralne i
obiektowe
mgr inż. Kajetan Kurus
4 marca 2014
1
Podstawy teoretyczne
1. Programowanie proceduralne (powtórzenie z poprzedniego semestru)
(a) Czym się charakteryzuje?
(b) Przykładowa struktura programu
2. Programowanie obiektowe
(a) Różnica pomiędzy programowaniem proceduralnym a obiektowym?
i. Czym jest obiekt?
(b) Podstawowe paradygmaty programowania obiektowego:
i.
ii.
iii.
iv.
2
Abstrakcja
Hermetyzacja
Dziedziczenie
Polimorfizm
Tworzenie nowego projektu w MS Visual Studio
2010
W celu utworzenia programu, należy najpierw stworzyć Projekt, w którym umieścimy
pliki źródłowe i nagłówkowe. Po uruchomieniu Visual Studio pojawi się ekran wyboru
poprzednio używanych projektów oraz możliwość stworzenia nowego. Po kliknięciu New
Project pojawi się menu wyboru typu projektu. Można wybrać spośród dostępnych języków programowania. Dla języka C++ jest możliwość utworzenia programu uruchamianego
w konsoli lub jako aplikację okienkową. Na potrzeby laboratorium należy utworzyć pusty
projekt (Epmpty Project).
1
Po utworzeniu projektu, w lewej części pojawi się eksplorator plików (Solution Explorer). Klikając prawy klawisz myszy można dodać nowy plik .cpp poprzez Add → New
Item.
2
Następnie po wyświetleniu się menu wyboru pliku, należy wybrać plik .cpp i nadać
mu nazwę np. main (.cpp jest domyślne dodawane).
3
Zadanie do rozwiązania na zajęciach
Zakładamy hodowlę wirtualnych kotów, na początku posiadamy dwa: Mruczusia i Miałczusia. Każdemu z nich należy nadać imię oraz poziom najedzenia, gdzie 0 oznacza bardzo
głodny a 100 najedzony. Dodatkowo mamy mieć możliwość nakarmienia kota do poziomu
100.
3.1
Programowanie Proceduralne
W podejściu proceduralnym musimy przypisać każdemu elementowi zmienną o odpowiednim typie. Dla imion kotów należy utworzyć zmienne typu string, przechowujący
tekst.Poziom jedzenia będzie zmienną int. W celu łatwiejszego rozpoznania zmiennych
nazwy będą nadawane następująco: kot IMIEKOTA ATRYBUT. Program musi zawierać łącznie 4 zmienne oraz musi zostać stworzona funkcja nakarm zmieniająca poziom
jedzenia na 100.
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#i n c l u d e <i o s t r e a m >
#i n c l u d e <s t r i n g >
u s i n g namespace s t d ;
int nakarm () {
return 100;
}
void main ( ) {
// zakladamy hodowle kotow
// nadajemy i m i o n a
s t r i n g k o t _ m r u c z u s _ i m i e = ” Mruczus ” ;
string kot_mialczus_imie = ” Mialczus ” ;
// nadajemy poziom j e d z e n i a 100% − n a j e d z o n y
i n t k o t _ m r u c z u s _ j e d z e n i e = 8 0 ; //%
i n t k o t _ m i a l c z u s _ j e d z e n i e = 3 0 ; //%
c o u t<<k o t _ m r u c z u s _ i m i e <<”
j e d z e n i e : ”<<k o t _ m r u c z u s _ j e d z e n i e <<e n d l ;
c o u t<<k o t _ m i a l c z u s _ i m i e <<”
j e d z e n i e : ”<<k o t _ m i a l c z u s _ j e d z e n i e <<e n d l ;
// karmimy k o t a
c o u t<<” karmimy M i a l c z u s i a ”<<e n d l ;
k o t _ m i a l c z u s _ j e d z e n i e=n a k a r m ( ) ;
c o u t<<k o t _ m r u c z u s _ i m i e <<”
j e d z e n i e : ”<<k o t _ m r u c z u s _ j e d z e n i e <<e n d l ;
c o u t<<k o t _ m i a l c z u s _ i m i e <<”
j e d z e n i e : ”<<k o t _ m i a l c z u s _ j e d z e n i e <<e n d l ;
s y s t e m ( ”PAUSE” ) ;
}
Efektem wykonania programu jest wypisanie imienia oraz wartości jedzenia kotów
przed i po karmieniu. W Visual Studio kompilacji dokonuje się poprzez naciśnięcie klawisza F7 (Build Solution). Program uruchamia się przyciskiem F5.
4
3.2
Programowanie Obiektowe
Ten sam program można napisać za pomocą programowania obiektowego. W programowaniu obiektowym można tworzyć obiekty będące pojedynczym bytem ale posiadające w
sobie wiele zmiennych i funkcji. Aby stworzyć obiekt danego typu należy najpierw zadeklarować jego strukturę: zmienne, funkcje, konstruktory i destruktory. W tym celu należy
skorzystać ze zmiennej typu class. Wewnątrz umieszczamy wszystkie elementy składowe,
można je pogrupować w zależności od hermetyzacji: pubic, protected, private.
1
2
3
4
5
6
7
c l a s s klasa
public :
int
int
private
int
};
{
a;
funkcja () ;
// Zmienna
// Funkcja
b;
// Zmienna
:
Definiowanie działania funkcji może zostać dokonane na zewnątrz klasy. Do danej funkcji
odwołujemy się w następujący sposób
1
TypZmiennej NazwaKlasy : : NazwaFunkcji ( ArgumentyWejsciowe )
Obiekty danej klasy tworzymy jak zwykłe zmienne np. typu int. Natomiast do pól klasy
odwołujemy się poprzez kropki.
1
2
3
klasa A ;
// s t w o r z e n i e o b i e k t u typu k l a s a
A . a = 1;
// p r z y p i s a n i e z m i e n n e j i n t a o b i e k t u A w a r t o s c i 1
A . f u n k c j a ( ) // U r u c h o m i e n i e f u n k c j i o b i e k t u A
Zadanie z kotami zrealizowane poprzez program napisany proceduralne, można zapisać
obiektowo. W tym celu należy tworzyć obiekty typu Kot zawierające w sobie pola: imię,
jedzenie oraz funkcje nakarm.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#i n c l u d e <i o s t r e a m >
#i n c l u d e <s t r i n g >
u s i n g namespace s t d ;
c l a s s kot {
public :
string imie ;
int jedzenie ;
void nakarm () ;
};
void kot : : nakarm ( ) {
jedzenie = 100;
}
void main ( ) {
// zakladamy hodowle kotow
//Tworzymy o b i e k t y k l a s y k o t
kot mruczus ;
kot mialczus ;
5
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// nadajemy i m i o n a
m r u c z u s . i m i e = ” Mruczus ” ;
mialczus . imie = ” Mialczus ” ;
// nadajemy poziom j e d z e n i a 100% − n a j e d z o n y
mruczus . jedzenie = 80;
mialczus . jedzenie = 30;
c o u t<<m r u c z u s . i m i e<<”
j e d z e n i e : ”<<m r u c z u s . j e d z e n i e <<e n d l ;
c o u t<<m i a l c z u s . i m i e<<”
j e d z e n i e : ”<<m i a l c z u s . j e d z e n i e <<e n d l ;
// karmimy k o t a
c o u t<<” karmimy M i a l c z u s i a ”<<e n d l ;
mialczus . nakarm () ;
c o u t<<m r u c z u s . i m i e<<”
j e d z e n i e : ”<<m r u c z u s . j e d z e n i e <<e n d l ;
c o u t<<m i a l c z u s . i m i e<<”
j e d z e n i e : ”<<m i a l c z u s . j e d z e n i e <<e n d l ;
s y s t e m ( ”PAUSE” ) ;
}
Rezultat uruchomienia jest identyczny jak w poprzednim. Jednak struktura programu
jest bardziej czytelna, ponieważ tworzymy tylko dwa obiekty.
6
4
Zadania indywidualne
Termin oddania 11-03-2014
4.1
Ocena 3.0
ˆ Zadanie z laboratorium
ˆ Stworzyć 4 obiekty klasy kot, które będą zawierać takie informacje jak: imię, jedzenie, wiek, rasa. Uzupełnić informacje oraz wyświetlić je w konsoli.
ˆ Rozszerzyć funkcję nakarm() o dodawanie własnej wartości. Należy pamiętać aby
zabezpieczyć program przed podaniem przez użytkownika liczby spoza zakresu od
0 do 100.
ˆ Wykonać funkcję nakarm z wartościami : -10, 10, 100, 130. Wyświetlić wyniki tych
operacji.
4.2
Ocena 4.0
ˆ Zadanie z laboratorium
ˆ Zadanie na 3.0
ˆ Dodać pole śpi, które będzie mogło przyjmować wartość true lub false.
ˆ Dodać funkcję śpij(), obudź() które będą modyfikować pole śpi oraz funkcję czyŚpi(), która sprawdzi czy kot śpi.
ˆ Wykorzystać czyŚpi(), aby nie można było zastosować funkcji śpij() gdy śpi, i
obudź() gdy nie śpi.
ˆ Stworzyć funkcję wyświetlająca wszystkie dane kota.
4.3
Ocena 5.0
ˆ Zadanie z laboratorium
ˆ Zadanie na 3.0
ˆ Zadanie na 4.0
ˆ Stworzyć nowy plik .cpp
ˆ Przerobić poprzedni program tak, aby dokonać pełnej hermetyzacji klasy kot, przy
zachowaniu jej funkcjonalności.
7

Podobne dokumenty