Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Podobne dokumenty
Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Wykład 8: klasy cz. 4

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

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

TEMAT : KLASY DZIEDZICZENIE

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

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

Programowanie obiektowe

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

PARADYGMATY PROGRAMOWANIA Wykład 4

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

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

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

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

Definiowanie własnych klas

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

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

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

Do czego służą klasy?

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

KLASY cz.1. Dorota Pylak

Wykład 3 Składnia języka C# (cz. 2)

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

Programowanie, część I

Do czego służą klasy?

PARADYGMATY PROGRAMOWANIA Wykład 2

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

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

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

Lab 9 Podstawy Programowania

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

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

Zadania z podstaw programowania obiektowego

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

Szablony funkcji i szablony klas

Język C++ Różnice między C a C++

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

PARADYGMATY PROGRAMOWANIA Wykład 3

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

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Rozdział 4 KLASY, OBIEKTY, METODY

Definicje klas i obiektów. Tomasz Borzyszkowski

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Aplikacje w środowisku Java

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

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

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Programowanie obiektowe - zadania

Wstęp do Programowania 2

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

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

Programowanie w języku C++

Szablony klas, zastosowanie szablonów w programach

Materiały do zajęć VII

Kurs WWW. Paweł Rajba.

Wykład 4: Klasy i Metody

Wstęp do programowania obiektowego, wykład 7

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Wykład 5: Klasy cz. 3

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Wprowadzenie do szablonów szablony funkcji

Programowanie obiektowe

Wartości domyślne, przeciażenia funkcji

Programowanie obiektowe

1 Podstawy c++ w pigułce.

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wartości domyślne, przeciażenia funkcji

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Wprowadzenie do szablonów szablony funkcji

Podstawy Programowania Obiektowego

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

Konstruktor kopiujacy

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

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.

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

Wyliczanie wyrażenia obiekty tymczasowe

Programowanie obiektowe i C++ dla matematyków

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

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

C++ Przeładowanie operatorów i wzorce w klasach

Transkrypt:

Programowanie obiektowe Materiały przygotował: mgr inż. Wojciech Frohmberg

Konstruktor Konstruktor w językach zorientowanych obiektowo pełni podwójną rolę: przydziela pamięć na obiekt, zdefiniowany klasą inicjuje wartości zmiennych dając możliwość wykonania instrukcji inicjalizujących Składnia deklaracji konstruktora (plik nagłówkowy): class EtykietaKlasy : public EtykietaKlasyNadrzednej { public: int pole; EtykietaKlasy(); }; Składnia definicji konstruktora (plik źródłowy): #include "plik_nagłówkowy.h" EtykietaKlasy::EtykietaKlasy() : pole(wartość), //inicjalizacja wartości pól, EtykietaKlasyNadrzednej() //jawne wywołanie konstruktorów { //instrukcje inicjalizujące } Jawne wywołanie konstruktorów ma na celu określenie z którego spośród konstruktorów program powinien korzystać w przypadku gdy jest kilka przeciążeń konstruktorów z różnymi parametrami. W przypadku, gdy jawne wywołanie konstruktora nie jest podane kompilator skorzysta z domyślnego bezparametrowego konstruktora klasy nadrzędnej. UWAGA! W przypadku jednak gdy konstruktor domyślny nie istnieje, tj. gdy w klasie nadrzędnej został zdefiniowany konstruktor parametryczny a nie został zdefiniowany konstruktor bezparametrowy kompilator będzie wymagał jawnego wywołania konstruktora klasy nadrzędnej. Podobnie w przypadku gdy bezparametrowy konstruktor klasy nadrzędnej jest określony jako private.

Zadanie 1. Utwórz hierarchię klas: Car +doorscount: int +producername: string +vintage: int +mileage: int Porsche a) Zainicjuj wartości pól w konstruktorze klasy Car jak i Porsche. b) Zweryfikuj czy możesz inicjalizować wartości pól klasy Car w klasie Porsche, zarówno w przypadku gdy klasa Car inicjalizuje pola jak i przypadku przeciwnym. c) Sprawdź czy można inicjować pola wartościami pochodzącymi z parametru konstruktora d) Sprawdź czy można inicjować pola polami klasy nadrzędnej oraz polami klasy bieżącej e) Korzystając ze zdobytej wiedzy z podpunktu d) zaproponuj metodę badania kolejności inicjalizacji pól (od lewej do prawej, czy od prawej do lewej) następnie ją przetestuj

Jednoargumentowy konstruktor konwersji Specyficznym rodzajem konstruktora jest konstruktor jednoargumentowy. Szczególną cechą takiego konstruktora jest to w jakich momentach jest wywoływany. Jest bowiem wykorzystywany do konwersji z typu argumentu konstruktora na typ klasy, która taki konstruktor posiada. Przykładowo jeśli zdefiniujemy jednoargumentowy konstruktor z parametrem typu int będziemy mogli: a) podstawiać za instancje danej klasy wartości typu int (mając na względzie że w tym momencie tworzymy nowy obiekt tego typu) b) przekazywać wartości typu int do metod/funkcji które przyjmują jako parametr typ naszej klasy. Szczególnym przykładem jednoargumentowego konstruktora konwersji jest konstruktor kopiowania. W tym wypadku typ argumentu naszego konstruktora powinien być taki jak typ naszej klasy. Konstruktor ten bywa przydatny gdy płytkie kopiowanie obiektu domyślnie używane przez kompilator nie jest wystarczające. Zadanie 2. Utwórz klasę CiagZnakow z niezbędnymi prywatnymi polami. Zaimplementuj jednoargumentowy konstruktor który jako argument przyjmuje: const char *, int, char, float, double, bool. Spraw by każdy z tych konstruktorów powodował zapamiętanie w klasie ciągu znaków odpowiadającej podanemu parametrowi. Dla tak zdefiniowanej klasy zaimplementuj metodę wypisz(), wypisującą dany ciąg znaków na ekran. Przetestuj czy wszystko działa jak należy. Zadanie 3. Usuń konstruktor z argumentem typu const char * z klasy CiagZnakow. Zaimplementuj za to konstruktor który przyjmuje argument typu string (poznany na poprzednich zajęciach znajdujący się w bibliotecę STL <string>). Zwróć uwagę że klasa string posiada zaimplementowany konstruktor z argumentem typu const char *. Zweryfikuj czy nadal możesz korzystać z podstawiania wartości typu const char * do obiektów typu CiagZnakow. Zadanie 4. Utwórz konstruktor kopiowania dla klasy CiagZnakow. Przetestuj podstawianie obiektów typu CiagZnakow pod instancje obiektów tegoż samego typu.

Dostęp do zmiennej przez adres, referencję i przez wartość Dostęp do obiektu celem w wypadku gdy chcemy nadpisać jego wartość możemy zapewnić w dwojaki sposób. Poprzez adres na miejsce w pamięci w którym znajduje się ten obiekt (operator &) lub poprzez referencję (etykieta obiektu). Mechanizmy te są o tyle przydatne że pozwalają przekazać wartości przechowywane przez instancję obiektu bez ich kopiowania (poprzez np. konstruktor kopiowania) do funkcji/metody, w której chcemy mieć do nich dostęp. Przykład parametru funkcji będącego wskaźnikiem do obiektu: void wypisz(ciagznakow *ciagznakow) { } Przykład parametru funkcji będącego referencją do obiektu: void wypisz(ciagznakow &ciagznakow) { } W pierwszym przypadku do obiektu ciag znaków musimy odwoływać się przez adres tzn. gdy na przykład chcemy odwołać się do metody/pola zawartej w obiekcie musimy skorzystać z operatora > np.: ciagznakow >wypisz(); natomiast w przykadku gdy chcemy coś zapisać do obiektu musimy skorzystać z jawnego wyłuskania referencji spod adresu tj. operatora * np.: (*ciagznakow)="ciag który chcemy wpisać do obiektu do którego mamy wskaźnik"; Do obiektu będącego referencją odwołujemy się poprzez operator. w przypadku gdy chcemy odwoływać się do jego pól/metod oraz zwyczajnie przez etykietę gdy chcemy coś doń podstawić. Zadanie 5. Zaimplementuj funkcje wypisz z przykładu.

Przeciążenie operatorów Język C++ pozwala na definiowanie akcji, które mają się wykonywać w przypadku użycia przez programistę operatora na wybranej przez użytkownika klasie. Akcje te mogą być definiowane statycznie poza klasą np. w danym namespace'ie jako funkcje, jako metody statyczne wewnątrz danej klasy dla której operator chcemy przeciążyć lub też jako dynamiczne metody obiektu. Lista operatorów które mogą zostać przeciążone: + - * / % ^ & ~!, = < > <= >= ++ -- << >> ==!= && += -= /= %= ^= &= = *= <<= >>= [ ] ( ) -> ->* new delete Nie mogą zostać przeciążone operatory ::,.,.* oraz?:. Przeciążenia operatorów mogą zwracać dowolny typ (nawet void). Nie ma jednak możliwości zmiany kolejności wykonywania operatorów. W przypadku gdy operator ma być przeciążony przez statyczną funkcję bądź metodę dla danego typu TYP składnia deklaracji jest następująca: typ_zwracany operator tutaj_znak_operatora (TYP etykieta [, TYP2 etykieta2]); UWAGA!!! Należy zwrócić uwagę, że powyższą deklarację należy poprzedzić słówkiem kluczowym static w przypadku gdy ma ona być statyczną metodą danej klasy. Deklaracja argumentu etykieta2 występuje tylko w przypadku operatorów binarnych. W przypadku gdy operator ma być przeciążony przez dynamiczną metodę klasy pomija się pierwszy parametr operatora. Dobrą praktyką jest zwracanie referencji do obiektu w przypadku przeciążania operatorów z grupy podstawiania i nawiasów kwadratowych. Zadanie 6. Dokonaj przeciążenia podstawowych operatorów dla rozsądnych dla ciągów znaków dla klasy CiagZnakow. Zadanie 7. Dokonaj przeciążenia operatora << dla klasy obiektu cout tak, by można było wypisywać na standardowe wyjście obiekty typu CiagZnakow. Zwróć uwagę jaki powinien być typ wartości zwracanej przez ten operator.

Tematy projektów 1. Proste konsolowe środowisko do wykonywania obliczeń macierzowych. Środowisko powinno mieć możliwość deklarowania zmiennych macierzowych, wektorowych i skalarnych. Powinno dawać możliwość mnożenia zmiennych przez siebie (z uwzględnieniem ograniczeń wynikających np. z wielkości macierzy) oraz zapisywania rezultatu takich operacji do zmiennych lub wypisywania ich na ekran. Można skorzystać do tego celu ze składni Matlaba, czy Octave'a darmowej jego alternatywy jednak nie jest to obowiązkowe. Dodatkowo środowisko powinno zapewniać możliwość zapisywania wszystkich zmiennych aktualnie przechowywanych w pamięci programu do pliku oraz odczytywanie takiego zrzutu zmiennych z pliku. 2. Konsolowy Mistrz klawiatury Program do nauki bezwzrokowego pisania na klawiaturze. Program powinien posiadać opcję kont użytkownika uwierzytelnianych logowaniem. Powinien dodatkowo przechowywać rozległe statystyki użytkownika, dające obraz nad czym użytkownik powinien popracować szybkością wpisywania tekstu czy też poprawnością wstukiwanych literek. Program powinien posiadać wbudowaną bazę tekstów do nauki bezwzrokowego pisania na klawiaturze, ale również dawać możliwość poszerzania tej bazy o dodatkowe pliki tekstowe (z poziomu konsoli). 3. Konsolowy program tajny kod Program do bezpiecznego przechowywania haseł użytkownika. Program powinien posiadać opcję kont użytkownika uwierzytelnianych logowaniem. Hasła użytkownika powinny być szyfrowane za pomocą hasła którym użytkownik loguje się do systemu. Po zalogowaniu użytkownik powinien mieć możliwość przeglądania słownika haseł poprzez podanie jakie hasło użytkownik chce podejrzeć np. show komputer_dom oraz zapisywania haseł w słowniku (z jednoczesnym bezpiecznym zapisaniem hasła w pliku tak by hasło było dostępne po wylogowaniu) np. store komputer_dom kwiatki. Zwróć uwagę że powinna być udostępniona wprowadzania spacji zarówno do hasła jak i do słowa pod którym hasło się kryje. Dodatkowo ma istnieć możliwość wypisywania wszystkich słów pod którymi kryją się hasła. Proszę wybrać jeden z w/w projektów i realizować go w parach bądź też w pojedynkę. Na ocenę będzie wpływać czytelność kodu, poprawne wykorzystanie mechanizmów programowania obiektowego (takich jak przeciążenie operatorów, wyrzucanie i łapanie wyjątków itp.), wyczerpujące okomentowanie kodu jak i prezentacja programu przy prowadzącym. Wstępny termin oddania projektu to 11.11.11.