Języki i techniki programowania Ćwiczenia 2

Podobne dokumenty
Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

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

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

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

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

Wykład 5: Klasy cz. 3

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

Wykład 4: Klasy i Metody

Języki i techniki programowania Ćwiczenia 4 Wzorce

Dziedziczenie. dr Jarosław Skaruz

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

Definiowanie własnych klas

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

Dokumentacja do API Javy.

Referencje do zmiennych i obiektów

Wykład 8: klasy cz. 4

Język C++ zajęcia nr 2

W dowolnym momencie można zmienić typ wskaźnika.

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

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

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Materiały do zajęć VII

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

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Lab 9 Podstawy Programowania

Programowanie i projektowanie obiektowe

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

JAVA W SUPER EXPRESOWEJ PIGUŁCE

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Programowanie obiektowe

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Podstawy programowania obiektowego

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

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

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

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

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

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

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Konstruktor kopiujacy

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

Kurs WWW. Paweł Rajba.

Rozdział 4 KLASY, OBIEKTY, METODY

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Podstawy Programowania Obiektowego

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

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

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

PARADYGMATY PROGRAMOWANIA Wykład 4

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

IX. Wskaźniki.(3 godz.)

Aplikacje w środowisku Java

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

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

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

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

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

Definicje klas i obiektów. Tomasz Borzyszkowski

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Czym jest stos i sterta?

Dziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java:

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Java: interfejsy i klasy wewnętrzne

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

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie obiektowe i C++ dla matematyków

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

Java Język programowania

Szablony funkcji i szablony klas

PARADYGMATY PROGRAMOWANIA Wykład 3

Interfejsy i klasy wewnętrzne

Dziedziczenie. Tomasz Borzyszkowski

Wartości domyślne, przeciażenia funkcji

TEMAT : KLASY DZIEDZICZENIE

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

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

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Algorytmy i Struktury Danych. Anna Paszyńska

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

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

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

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

Klasy abstrakcyjne i interfejsy

Lista, Stos, Kolejka, Tablica Asocjacyjna

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

Programowanie obiektowe

Definiowanie własnych klas

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie obiektowe

Wykład 2: Podstawy Języka

Transkrypt:

Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel

Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++... 5 Ogólne zasady przekazywania parametrów... 8 Przypisanie... 8 Porównywanie obiektów... 9 Inicjalizacja obiektów... 9 Modyfikator const... 10 Zwracanie wartości przez funkcję... 10 Techniki programowania... 11 Zadania... 12

Język C++ Przekazywanie parametrów do funkcji Przekazywanie parametrów w Javie. W Javie parametry przekazywane są przez wartość. Zmienne typów prostych, takich jak int, float odnoszą się bezpośrednio do liczb. Zmienne typów złożonych, takich jak tablice, klasy definiowane przez użytkownika, itd. odnoszą się do wskaźników do obiektów. Przykład void foo(int i, Float number1, int [] array1, List<Integer> list1, Triangle triangle1) { } Wartość i jest kopiowana na stos. Wskaźnik do number1 jest kopiowany na stos. Wskaźnik do tablicy array1, która jest obiektem jest kopiowany na stos. Wskaźnik do list1 jest kopiowany na stos. Wskaźnik do triangle1 jest kopiowany na stos. Przekazywanie parametrów w c++ 1. W c++ parametry mogą być przekazywane przez wartość. Zmienne oznaczają bezpośrednio obiekty. void foo(int i, int array[10], Triangle triangle1) Wartość i jest kopiowana na stos. Tablice w c++ są w rzeczywistości wskaźnikami na pierwszy element, a więc będzie kopiowany na stos tylko wskaźnik. Na stos będzie kopiowany obiekt triangle1 zdefiniowany przez użytkownika. 2. W c++ parametry mogą być przekazywane przez referencję. void foo(int & i, Triangle & triangle1) wywołanie funkcji foo(i, triangle) Referencja to stały wskaźnik (int *const p). Oznacza to, że nie można zmienić wskazywanego obiektu na inny. We funkcji na obiekt triangle mówimy triangle1. Na stos kopiowany jest wskaźnik do liczby i, oraz wskaźnik do obiektu triangle.

Dana zmienna w Javie może wskazywać na różne obiekty, w c++ referencje są stałymi wskaźnikami, a więc nie może się zmieniać obiekt, na który wskazują. Przykład: Java: Triangle triangle1 = new Triangle(); Triangle triangle2 = new Triangle(); triangle1 = triangle2; Wskaźnik triangle1 wskazuje poźniej na triangle2. Obiekt na który wskazywał na początku triangle1 zostanie usunięty przez garbage collector. C++: Triangle & triangle1 = Triangle(); Triangle & triangle2 = Triangle(); Nie można zmienić wskazania triangle1 (triangle1 = triangle2 tutaj zostanie uruchomione kopiowanie obiektów) Przykładowe zastososowanie referencji: konieczność zmiany przekazywanego obiektu we funkcji. Referencje w c++ nie zabezpieczają w 100% przed błędami pracy na nieznanym obszarze pamięci, ze względu na istnienie wskaźników w c++. Do funkcji przyjmującej argument (int & p) można podać p, gdzie p jest zdefiniowane int *p, ale nie zostało zainicjalizowane. Przez co p wskazuje na nieznany obszar pamięci. W Javie każda zmienna typu złożonego musi zostać zainicjalizowana, dlatego nie ma problemu ze wskazaniem na nieznany obszar pamięci. Stała referencja Jeśli funkcja przyjmuje argument: int & a, czy można podać do tej funkcji liczbę np. 2 + 2? Wartość wyrażenia jest stała, dlatego można to zrobić pod warunkiem, że argumentem funkcji będzie stała referencja: const int & a. Jak jest implementowana stała referencja? const int *const p; 3. W c++ parametry mogą być również przekazywane za pomocą wskaźników. void foo(int * i, Triangle * triangle1) Na stos kopiowane są wskaźniki (adresy) do liczby i oraz obiektu triangle1. Porównanie referencji i wskaźników W większości wypadków referencje są bezpieczniejsze od wskaźników, ponieważ referencje muszą być inicjalizowane adresem obiektu.

Ogólne zasady przekazywania parametrów Parametry niewielkich rozmiarów można przekazywać przez wartość, gdy parametry mają większy rozmiar lepiej przekazywać je przez referencję. Przypisanie a = b W Javie dla typów złożonych kopiowany jest tylko wskaźnik. W c++ przypisanie będzie dotyczyło kopiowania obiektów. Jeśli a i b to są referencjami to podczas przypisania b do a będzie kopiowany obiekt b. Referencja nie może być zmieniana. Tutaj modelem referencji, która wyjaśnia to kopiowanie jest traktowanie referencji jako przezwiska. Kopiowane są obiekty bo referencje są tylko przezwiskami tych obiektów. Kopiowanie obiektów w Javie. Implementacja interfejsu cloneable i nadpisanie metody clone. Implementacja metody clone na tablicach: dla każdego elementu są tworzone referencje do elementów wyjściowych, chyba, że są to typy proste, wtedy jest robione kopiowanie tych liczb. Kopiowanie tylko referencji nazywa się shallow copy, w przeciwieństwie do deep copy. Porównywanie obiektów W javie porównywanie za pomocą operatora == porównuje zmienne, które są wskaźnikami do obiektów. A więc nie ma porównania samych obiektów, tylko ich adresów. Przykład: String a = a ; String b = a ; warunek a == b nie będzie spełniony. Jeśli zachodzi konieczność porównania zawartości obiektów to wywołuje się metodę equals. W C++ aby porównać dwa obiekty konieczne jest zdefiniowanie dla nich operatora ==. Dla typu string operator ten zdefniowany jest jako porównanie leksykalne.

Inicjalizacja obiektów W Javie trzeba zainicjalizować zmienną złożoną, przy braku inicjalizacji zmiennej złożonej pojawi się błąd kompilacji. W C++ gdy nie zainicjalizujemy obiektu, zostanie wywołany defaultowy konstruktor. Modyfikator const W Javie słowo kluczowe final oznacza, że nie można danej zmiennej modyfikować, co oznacza, że nie można modyfikować wskaźnika, ale można modyfikować dane obiektu. Jak w Javie rozwiązuje się problem taki, że chcielibyśmy zapewnić aby dany obiekt nie był modyfikowany w danym miejscu? Można stworzyć interfejs, z metodami, które są nam potrzebne, a które nie modyfikują obiektu. Klasa musi wtedy implementować ten interfejs. W C++ const oznacza, że danego obiektu nie można modyfikować wewnętrznie. Jeśli jednak chcemy użyć metody dla obiektu const, to ta metoda musi mieć modyfikator const. A jeśli ta metoda chce zapisać pewne wyniki tymczasowe w klasie, to aby to było możliwe to pola klasy, które będą wykorzystane muszą mieć modyfikator mutable. Zwracanie wartości przez funkcję Zwracanie tablicy. W Javie metoda może zwrócić tablicę. Tablica w Javie jest alokowana za pomocą operatora new, dopóki istnieje odwołanie do tej tablicy, to tablica nię będzie usuwana przez garbage collector. W C++ funkcja nie może zwrócić tablicy. Tablica powinna być przekazana w parametrach funkcji.

Techniki programowania 1. Stosowanie wszędzie const tam gdzie spodziewamy się, że obiekt nie będzie modyfikowany. 2. Sprawdzanie argumentów funkcji: w każdej funkcji na początku warto sprawdzić poprawność podawanych argumentów.

Zadania zadanie podstawowe Stworzyć klasę Side - stworzyć konstruktor w klasie Side przyjmujący długość boku, długość boku w klasie Side jest const Stworzyć klasę Triangle, która zawiera 3 boki typu Side - stworzyć konstruktor, którego parametrami są 3 obiekty typu Side, konstruktor ten zapisuje podane boki do obiektu Triangle jako stałe parametry - napisać metodę sprawdzającą czy podane boki spełniają warunek trójkąta - stworzyć operator porównania == dla klasy Triangle - stworzyć operator porównania!= dla klasy Triangle Utworzyć klasę Triangles: - utworzyć konstruktor do którego podajemy tablicę obiektów typu Triangle. - stworzyć metodę wyszukującą trójkąt o maksymalnym obwodzie metoda zwraca trójkąt o maksymalnym obwodzie - utworzyć metodę sprawdzającą czy istnieją w tabeli dwa różne trójkąty: funkcja zwraca true, jeśli istnieją, zwraca false, jeśli nie istnieją. We funkcji main stworzyć tablicę obiektów typu Triangle, utworzyć obiekt klasy Triangles, wywołać z niego metody wyszukiwania trójkąta o maksymalnym obwodzie, oraz sprawdzania czy istnieją dwa różne trójkąty. Napisać funkcję testującą poprawność działania programu. zadanie dodatkowe 1 - utworzyć operator przypisania = dla klasy Triangle - utworzyć konstruktor kopiujący dla klasy Triangle - utworzyć konstruktor i operator kopiujący dla klasy Triangles - skopiować obiekt Triangles za pomocą konstruktora kopiującego oraz operatora kopiującego Napisać funkcję testującą powyższą funkcjonalność. zadanie dodatkowe 2 - dla klasy Triangles zdefiniować operator indeksujący [].

- dla klasy Triangle zdefiniować operator wypisywania <<, - dla klasy Triangles zdefiniować operator wypisywania << - stworzyć metodę klasy Triangle do obliczania pola trójkąta za pomocą wzoru Herona, - stworzyć metodę w klasie Triangles wyszukującą trójkąt o maksymalnym polu Napisać funkcję testującą powyższe metody.