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