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. Abstrakcja ii. Hermetyzacja iii. Dziedziczenie iv. Polimorfizm 2 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 #i n c l u d e <iostream > 2 #i n c l u d e <s t r i n g > 3 4 u s i n g namespace std ; 5 6 i n t n a k a r m ( ) { 7 r e t u r n 1 0 0 ; 8 } 9 10 void main ( ) { 11 // zakladamy hodowle kotow 12 13 // nadajemy imiona 14 string ko t _ mruczus_ imie = Mruczus ; 15 s t r i n g k o t _ m i a l c z u s _ i m i e = M i alczus ; 16 17 // nadajemy poziom j e d z e n i a 100% najedzony 18 19 i n t k o t _ m r u c z u s _ j e d z e n i e = 8 0 ; //% 20 i n t k o t _ m i a l c z u s _ j e d z e n i e = 3 0 ; //% 21 22 cout<<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 <<endl ; 23 cout<<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 <<endl ; 24 25 // karmimy kota 26 cout<< karmimy M i a l c z u s i a <<endl ; 27 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 ( ) ; 28 29 cout<<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 <<endl ; 30 cout<<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 <<endl ; 31 32 s y s t e m ( PAUSE ) ; 33 } 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 c l a s s k l a s a { 2 p u b l i c : 3 i n t a ; // Zmienna 4 i n t f u n k c j a ( ) ; // Funkcja 5 p r i v a t e : 6 i n t b ; // Zmienna 7 } ; 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 T y p Z m i e n n e j N a z w a K l a s y : : N a z w a F u n k c j i ( A r g u m e n t y W e j s c i o w e ) Obiekty danej klasy tworzymy jak zwykłe zmienne np. typu int. Natomiast do pól klasy odwołujemy się poprzez kropki. 1 k l a s a A ; // s t w o r z e n i e o b i e k t u typu k l a s a 2 A. a = 1 ; // p r z y p i s a n i e zmiennej i n t a o b i e k t u A w a r t o s c i 1 3 A. f u n k c j a ( ) // Uruchomienie 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 #i n c l u d e <iostream > 2 #i n c l u d e <s t r i n g > 3 4 u s i n g namespace std ; 5 6 c l a s s kot { 7 p u b l i c : 8 string imie ; 9 i n t j e d z e n i e ; 10 void n a k a r m ( ) ; 11 } ; 12 void kot : : n a k a r m ( ) { 13 j e d z e n i e = 1 0 0 ; 14 } 15 16 void main ( ) { 17 // zakladamy hodowle kotow 18 19 //Tworzymy o b i e k t y k l a s y kot 20 kot mruczus ; 21 kot mialczus ; 22 23 24 5
25 // nadajemy imiona 26 mruczus. imie = Mruczus ; 27 mialczus. imie = Mialczus ; 28 29 // nadajemy poziom j e d z e n i a 100% najedzony 30 31 mruczus. jedzenie = 8 0 ; 32 mialczus. jedzenie = 3 0 ; 33 34 cout<<m r u c z u s. imie<< j e d z e n i e : <<m r u c z u s. jedzenie <<endl ; 35 cout<<m i a l c z u s. imie<< j e d z e n i e : <<m i a l c z u s. jedzenie <<endl ; 36 37 // karmimy kota 38 cout<< karmimy M i a l c z u s i a <<endl ; 39 m i a l c z u s. n a k a r m ( ) ; 40 41 cout<<m r u c z u s. imie<< j e d z e n i e : <<m r u c z u s. jedzenie <<endl ; 42 cout<<m i a l c z u s. imie<< j e d z e n i e : <<m i a l c z u s. jedzenie <<endl ; 43 s y s t e m ( PAUSE ) ; 44 } 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