WPROWADZENIE. Programowanie Obiektowe Mateusz Cicheński

Podobne dokumenty
Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Tematy projektów C++ Programowanie obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Projektowanie klas c.d. Projektowanie klas przykład

I - Microsoft Visual Studio C++

Część 4 życie programu

Laboratorium 1 - Programowanie proceduralne i obiektowe

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Pracownia specjalistyczna. Materiały przygotowali: mgr inż. Wojciech Frohmberg, mgr inż. Michał Kierzynka

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Technologie cyfrowe semestr letni 2018/2019

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Programowanie obiektowe język C++

Technologie cyfrowe semestr letni 2018/2019

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

1 Podstawy c++ w pigułce.

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Język C++ wykład VIII

Szablony funkcji i klas (templates)

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

TEMAT : KLASY POLIMORFIZM

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Mechanizm dziedziczenia

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Programowanie obiektowe - 1.

1 Podstawy c++ w pigułce.

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Podstawy języka skryptowego Lua

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Programowanie Proceduralne

Podstawy Programowania Obiektowego

Wstęp do programowania. Wykład 1

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

dr inż. Jarosław Forenc

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie proceduralne w języku C++ Podstawy

Zofia Kruczkiewicz, ETE8305_2 1

Wstęp do Programowania 2

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Programowanie Obiektowe i C++

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

Wstęp do programowania

Każdy z nich posiada swoje parametry. W przypadku silnika może to być moc lub pojemność, w przypadku skrzyni biegów można mówić o skrzyni

Podstawy programowania skrót z wykładów:

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Qt sygnały i designer

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie obiektowe

Polimorfizm w pigułce

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Wprowadzenie do programowania

Programowanie strukturalne i obiektowe

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie obiektowe

Programowanie MorphX Ax

Programowanie obiektowe

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Programowanie obiektowe

PARADYGMATY PROGRAMOWANIA Wykład 2

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Każdy z nich posiada swoje parametry. W przypadku silnika może to być moc lub pojemność, w przypadku skrzyni biegów można mówić o skrzyni

Zaawansowane programowanie w C++ (PCP)

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Programowanie 2. Język C++. Wykład 3.

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

PARADYGMATY PROGRAMOWANIA Wykład 3

tablica: dane_liczbowe

Przekazywanie argumentów wskaźniki

Zaawansowane programowanie w języku C++ Klasy w C++

Listy powiązane zorientowane obiektowo

Transkrypt:

WPROWADZENIE Programowanie Obiektowe Mateusz Cicheński

PLAN ZAJĘĆ Paradygmaty programowania C++ Krótki przykład Kompilacja i linkowanie Makefile Przydatne flagi kompilatora Zaliczenie przedmiotu Harmonogram roku Omówienie Projektu 1

PROGRAMOWANIE STRUKTURALNE Aplikacja posiada kod składający się z hierarchicznie ułożonej sekwencji struktur programistycznych. Sekwencje Instrukcje wyboru Pętle Instrukcje skoku cout << Witaj świecie\n ; int i = 5; result = result % 15; if (i == 0) { result = result 15; } switch (option) { case 1: cout << option 1 ; break; case 2: cout << option 2 ; break; default: cout << none ; break; } for (int i = 0; i < 5; i++) { result += i; } while (n > 0) { n--; } do { n--; } while (n > 0); break; continue; label: goto label;

PROGRAMOWANIE PROCEDURALNE Aplikacja podzielona jest na niezależne części (procedury, funkcje), które przetwarzają dane. Dane przekazywane są przez parametry jako wskaźniki lub referencje. Procedura void sum(int a, int b, int& result) { result = a + b; } Funkcja int sum(int a, int b) { return a+b; }

PROGRAMOWANIE OBIEKTOWE Aplikacja zdefiniowana jest przez zbiór obiektów, które są wystąpieniami klas. Sterowanie odbywa się poprzez wymianę komunikatów między obiektami. Obiekty posiadają swój stan (pola) oraz komunikaty (metody), które umożliwiają wymianę informacji.

PROGRAMOWANIE OBIEKTOWE C.D. Deklaracja klasy obiektu class Car { private: int wheels; protected: int maxspeed; public: Car(int wheels); void printinfo(); } Implementacja jego metod Car::Car(int wheels) { this->wheels = wheels; maxspeed = 10; } void Car::printInfo() { cout << Ten samochód ma << wheels; cout << oraz osiąga prędkość maksymalną << maxspeed; cout << \n ; }

RÓŻNICE MIĘDZY PP A PO Programowanie proceduralne Programowanie obiektowe Skupia się na: Algorytmie Danych Podstawowa jednostka danych Struktura Klasa Podstawowa operacja Funkcja (procedura) Metoda (komunikat) Cel operacji Wykonanie zadania Manipulacja obiektem Sposób dostępu do danych Wszystko jest publiczne (z wyjątkiem zmiennych lokalnych) Klasy posiadają zdefiniowany zbiór metod dostępnych publicznie

WŁASNOŚCI PO Abstrakcja możliwość definiowania własnych klas odzwierciedlających rzeczywistość Hermetyczność ukrywanie informacji obiekty stają się niezależne od siebie pod względem implementacji, liczy się tylko interfejs wymiany informacji Dziedziczenie możliwe jest tworzenie hierarchii klas, bez konieczności redefiniowania funkcjonalności obiektu z którego dziedziczymy Polimorfizm możliwość podstawiania pod zmienną określonego typu wystąpień różnych klas, przy równoczesnym zapewnieniu zgodności z pełnym typem obiektu

Dyrektywy preprocesora PRZYKŁAD W C++ (1) 1. #ifndef _CAR 2. #define _CAR 3. 4. class Car { 5. private: 6. int wheels; 7. protected: 8. int maxspeed; 9. public: 10. Car(int wheels); 11. void printinfo(); 12. }; 13. 14. #endif car.h

1. #include <iostream> 2. #include "car.h" 3. 4. using namespace std; 5. 6. Car::Car(int wheels) { 7. this->wheels = wheels; 8. maxspeed = 10; 9. } 10. 11. void Car::printInfo() { 12. cout << "This car has " << wheels; PRZYKŁAD W C++ (2) 13. cout << " wheels and max speed equals to " << maxspeed; 14. cout << "\n"; 15. } car.cpp

PRZYKŁAD W C++ (3) 1. #include <iostream> main.cpp 2. #include "car.h" 3. 4. using namespace std; 5. 6. int main(int argc, char** argv) 7. { 8. Car* car = new Car(4); 9. car->printinfo(); 10. return 0; 11. }

$ g++ main.cpp o main KOMPILACJA C++ 1. In function `main': 2. main.cpp:(.text+0x94): undefined reference to `Car::Car(int)' 3. main.cpp:(.text+0xa5): undefined reference to `Car::printInfo()' car.h main.cpp car.cpp

$ g++ c car.cpp o car.o $ g++ c main.cpp o main.o $ g++ *.o o main LINKOWANIE C++ main main.o car.o

MAKEFILE Ułatwia kompilację złożonych systemów Posiada prostą składnię: <cel> : [ <zależności> ]* [ <TAB> <polecenie> <endl> ]+ Oraz ciekawe rozszerzenia, np. makra: <nazwa> = <wartość>

MAKEFILE - PRZYKŁAD 1. OBJS = car.o main.o 2. CC = g++ 3. DEBUG = -g 4. CFLAGS = -Wall -c $(DEBUG) 5. LFLAGS = -Wall $(DEBUG) 6. 7. all : $(OBJS) 8. $(CC) $(LFLAGS) $(OBJS) -o main 9. 10. main.o : main.cpp car.h 11. $(CC) $(CFLAGS) main.cpp 12. 13. car.o : car.h car.cpp 14. $(CC) $(CFLAGS) car.cpp 15. 16. clean: 17. rm *.o main 18. Makefile

FLAGI KOMPILATORA G++ -c kompilacja bez linkowania -o plik docelowy -g dodaje informacje wykorzystywane przez debugger -Wall włączenie wszystkich flag dotyczących ostrzeżeń, pozwala m.in. wykryć konstrukcje, które uważane są za wątpliwe, a które łatwo zmienić -MM generuje wpis dla Makefile dotyczący zależności $ g++ -MM main.cpp main.o: main.cpp car.h

ZALICZENIE PRZEDMIOTU harmonogram i zasady

HARMONOGRAM Data Zadanie 27-10-2014 Wybór Projektu 1 17-11-2014 Przesłanie sprawozdania do Projektu 1 8-12-2014 Oddanie Projektu 1 w trakcie zajęć 22-12-2014 Wybór Projektu 2 12-01-2015 Przesłanie sprawozdania do Projektu 2 26-01-2015 Oddanie Projektu 2 w trakcie zajęć

OCENA Z LABORATORIUM Aby zaliczyć przedmiot należy zrealizować dwa projekty. Projekty oceniane są wg skali punktowej, która jest następnie przeliczana na wartości procentowe wg tabeli: Przedział procentowy <0-50) <50-60) <60-70) <70-80) <80-90) <90-100) Ocena 2.0 3.0 3.5 4.0 4.5 5.0 Oceną końcową jest średnia arytmetyczna ocen z projektów. Spóźnienie względem harmonogramu skutkuje uzyskaniem oceny o pół stopnia niższej za każdy tydzień opóźnienia

WARUNKI REALIZACJI PROJEKTU Można: używać grafiki z Internetu używać bibliotek zewnętrznych wzorować się na istniejących programach (kopiować pomysły) Nie można: wykorzystywać cudzego kodu

WYMAGANIA Sprawozdanie powinno zawierać: Imiona i nazwiska autorów z numerami indeksu Krótki opis projektu Wymagane biblioteki Diagram klas wykorzystywanych w aplikacji Spis wymagań (specyfikacja projektu)

WYMAGANIA C.D. Finalny projekt powinien zawierać: Kod źródłowy aplikacji Skompilowane biblioteki używane przez aplikację (.dll) Sposób kompilacji (zwłaszcza gdy nietypowy) Zaktualizowane sprawozdanie Opis działania aplikacji (np. opis interakcji z użytkownikiem, opis sztucznej inteligencji)

Sprawozdanie [6 pkt], w tym: [3 pkt] diagram klas [3 pkt] spis wymagań PUNKTACJA Finalny projekt [14 pkt], w tym: [2 pkt] zgodność ze sprawozdaniem [4 pkt] zastosowanie paradygmatu PO (abstrakcja, enkapsulacja, dziedziczenie, polimorfizm) [4 pkt] wykorzystanie mechanizmów języka C++ (wskaźniki, konstruktory, destruktory, metody wirtualne, późne wiązanie, dyrektywy preprocesora, wyjątki, przestrzenie nazw, wzorce, STL etc.) [4 pkt] bezawaryjna praca aplikacji, formatowanie kodu, komentarze w kodzie

SPIS PROJEKTÓW Nazwa projektu Typ Wymaga GUI? Max. liczba osób Single-User Dungeon Gra Nie 2 Okręty Gra Nie 1 Scorched Earth Gra Nie 2 Labirynt Gra Nie 1 Generator wierszy Aplikacja użytkowa Nie 2 Kalkulator w ONP Aplikacja użytkowa Nie 1 Manager zasobów Aplikacja Użytkowa Nie 1 Kalendarz Aplikacja użytkowa Nie 1 Arkanoid Gra Tak 2 Gra platformowa Gra Tak 3 Wyścigi Gra Tak 2

SINGLE-USER DUNGEON Możliwość wydawania poleceń, które wpływają na osiągane postępy w grze Możliwość zapisania/odczytania stanu gry Tematyka gry dowolna Przykładowe klasy: Hero Monster Goblin Troll

OKRĘTY Popularna gra w statki Możliwość zapisania/odczytania stanu gry Prosta sztuczna inteligencja Przykładowe klasy: Board Ship Cruiser Battleship

Obliczanie trajektorii pocisku SCORCHED EARTH - WARIACJA Możliwość zapisania/odczytania stanu gry Prosta sztuczna inteligencja Przykładowe klasy: Tank Weapon Cannon Laser

Generowanie losowych labiryntów Możliwość zapisania/odczytania stanu gry LABIRYNT Wprowadzenie statystki: liczba ruchów gracza względem minimalnej liczby ruchów Przykładowe klasy: Maze Item Rope Key

GENERATOR WIERSZY Możliwość wczytania słownika, z którego mają powstać wiersze Określanie parametrów wiersza Zastosowanie zasad gramatyki przy konstrukcji zdań Przykładowe klasy: Poem Word Adjective Adverb

Zapisywanie historii sesji KALKULATOR ONP Tworzenie zmiennych i możliwość wykorzystania ich w kolejnych operacjach Zachowanie składni zgodnie z zasadami Odwrotnej Notacji Polskiej Przykładowe klasy: Trace Operand Number UserVariable * + - a b c * d e ab+cde*-*

MANAGER ZASOBÓW Np. ewidencja pracowników firmy, katalogowanie zbiorów muzycznych Możliwość zapisania/odczytania stanu aplikacji (tj. danych użytkownika)

KALENDARZ Zarządzanie wpisami w kalendarzu Możliwość zapisania/wczytania wydarzeń (format ical) Przykładowe klasy: Day Event SingleTimeEvent ContinousEvent

ARKANOID Możliwość tworzenia własnych poziomów (prosty format pliku lub edytor) Zapisywanie listy rekordów Sterowanie klawiaturą Przykładowe klasy: Racket Block NormalBlock MovingBlock

GRA PLATFORMOWA Możliwość tworzenia własnych poziomów (prosty format plików lub edytor) Sterowanie klawiaturą Możliwość zapisania/wczytania stanu gry Wykrywanie kolizji Przykładowe klasy: Player Enemy WorldBlock DestructibleBlock SolidBlock

WYŚCIGI Wykrywanie kolizji Tryb ducha powtórzenie przejazdu gracza przez komputer Sterowanie klawiaturą Przykładowe klasy: Obstacle Vehicle SmallCar SportCar

DZIĘKUJĘ ZA UWAGĘ następne zajęcia: Składnia C++, cz. 1