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

Podobne dokumenty
Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Wykład 4: Klasy i Metody

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

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

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

Wykład 8: klasy cz. 4

Programowanie obiektowe

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Wykład 5: Klasy cz. 3

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

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

Wstęp do programowania

Definiowanie własnych klas

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

Programowanie obiektowe

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

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

Rozdział 4 KLASY, OBIEKTY, METODY

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Wykład 5: Więcej o Klasach i Metodach

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

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Programowanie obiektowe

Podstawy Programowania Obiektowego

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wstęp do programowania

Definicje klas i obiektów. Tomasz Borzyszkowski

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Wstęp do informatyki- wykład 11 Funkcje

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

Technologie i usługi internetowe cz. 2

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Wstęp do informatyki- wykład 9 Funkcje

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

Materiały do zajęć VII

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

Programowanie, część I

Programowanie obiektowe

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Programowanie obiektowe

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

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

Wykład 2: Podstawy Języka

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

Podstawowe części projektu w Javie

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

PARADYGMATY PROGRAMOWANIA Wykład 4

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

KLASY cz.1. Dorota Pylak

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

TEMAT : KLASY DZIEDZICZENIE

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

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

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

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

Programowanie obiektowe

Do czego służą klasy?

Metody Metody, parametry, zwracanie wartości

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

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

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Programowanie strukturalne i obiektowe. Funkcje

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

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

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

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Dokumentacja do API Javy.

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

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

ALGORYTMY I STRUKTURY DANYCH

Multimedia JAVA. Historia

Informatyka I. dr inż. Andrzej Czerepicki.

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie w Internecie. Java

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

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

1 Atrybuty i metody klasowe

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

PARADYGMATY PROGRAMOWANIA Wykład 3

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

Wykład 4. Tablice. Pliki

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Szablony funkcji i klas (templates)

Aplikacje w środowisku Java

Polimorfizm. dr Jarosław Skaruz

Przypomnienie o klasach i obiektach

Klasy i obiekty cz II

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

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

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

C-struktury wykład. Dorota Pylak

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

Transkrypt:

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

Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy Tworzenie obiektów klasy Konstruktor klasy Elementy statyczne klasy

Złożone typy danych Java pozwala na definiowanie nowych typów danych przez programistę Złożony typ danych jest budowany jako struktura na bazie innych typów danych Mogą być proste lub również złożone Przykłady (już znanych) złożonych typów danych: String (ciąg znaków) Tablica (uporządkowany zbiór danych dowolnego typu)

Przykład złożonego typu danych Marka Pojemność silnika Samochód Kolor Spalanie Liczba miejsc Struktura danych w programie

Klasa Klasa złożony typ danych definiowany w programie przez użytkownika class Samochód() { String marka; double pojemnośćsilnika; Color kolor; float spalanie; int liczbamiejsc; }

Definicja klasy Każda klasa powinna być definiowana w osobnym pliku Wyjątek: klasy wewnętrzne (p. dalej) Nazwa pliku = nazwa klasy +.java class Samochód { } Samochód.java class Motocykl { class Silnik { } } Motocykl.java

Deklaracja zmiennej typu klasa Deklaracja zmiennej złożonego typu nie różni się od deklaracji zmiennej prostego typu Zmienna typu klasowego nazywa się instancją klasy lub obiektem klasy Samochód S1, S2; Typ danych Nazwa zmiennej

Cykl życia obiektu klasy Deklaracja Inicjalizacja Wykorzystanie Niszczenie

Inicjalizacja obiektu klasy Obiekt klasy (zmienna typu złożonego) musi być inicjowany za pomocą słowa kluczowego new Uwaga: po nazwie typu danych (klasy) używamy nawiasów okrągłych! S1 = new Samochód();

Wykorzystanie obiektu klasy Obiekt klasy zachowuje się jak zmienna: Może występować w instrukcji przypisania wartości Można go przekazać jako argument metody lub pozyskać jako wynik jej działania, etc. Co nie działa z automatu : Operacje relacji (np. porównanie trzeba zaimplementować we własnym zakresie) Operacje wyświetlania/wprowadzania

Likwidacja obiektu klasy Java nie posiada mechanizmu jawnego niszczenia utworzonych obiektów tym się zajmuje środowisko wykonania JRE W celu oznaczenia iż zmienna nie jest już skojarzona z żadnym obiektem, należy jej przypisać wartość null Samochód S1 = null; // domyślnie S1 = new Samochód(); // użycie obiektu S1 = null; // likwidacja

Pola klasy Pole (syn.: atrybut, właściwość) jest zmienną dowolnego typu zdefiniowaną wewnątrz klasy Pole jest dostępne na obszarze całej klasy class Samochód() { String marka; double pojemnośćsilnika; Color kolor; float spalanie; int liczbamiejsc; } Pola klasy

Adresacja pól klasy Wewnątrz klasy: nazwapola Na zewnątrz klasy: obiekt.nazwapola Wszystkie bieżące wartości pól klasy jednoznacznie określają stan obiektu S1 = new Samochód(); S1.marka = "Fiat"; S1.pojemnośćSilnika = 1.6; S1.kolor = Color.Black; S1.liczbaMiejsc = 5;

Pojęcie metody w programowaniu Program = zapis algorytmu w postaci kodu źródłowego Podprogram = samodzielny fragment kodu stosowany w celu redukcji powtórzeń instrukcji, który może posiadać: Własną nazwę Parametry wejściowe (opcjonalnie) Wynik działania (opcjonalnie) Podprogramy w Java są nazywane metodami Deklaracja metody = zdefiniowanie w kodzie źródłowym nazwy, parametrów (argumentów), wyniku oraz treści metody Wywołanie metody = wykonanie instrukcji stanowiących jej treść, w określonym miejscu programu Procedura = metoda nie zwracająca wyników (przest.) Funkcja = metoda zwracająca wynik w miejscu wywołania (określenie popularne np. w C++)

Metody klasy Metoda klasy = metoda zadeklarowana wewnątrz klasy (syn. funkcja klasy) Metoda opisuje zachowanie obiektu i może zmieniać jego stan Metoda ma dostęp do wszystkich pól klasy class Samochód() { Pole klasy int prędkość; void przyspiesz(int kmh) { prędkość += kmh; } void zwolnij(int kmh) { prędkość -= kmh; } } Metody klasy

Deklaracja metody w klasie Metoda może być zadeklarowana w dowolnym miejscu wewnątrz klasy Nie można deklarować metody wewnątrz innej metody, poza szczególnymi przypadkami które zostaną omówione później Przy deklaracji metody należy podać: Jej nazwę (zasady nazewnictwa jak dla zmiennych) Typ danych zwracanej wartości (obowiązkowo) Listę oraz typy danych parametrów wejściowych (opcjonalnie)

Przykłady deklaracji metod Metoda bez parametrów nie zwracająca żadnego wyniku void Info() { // ciało metody } Metoda z parametrami nie zwracająca żadnego wyniku void Drukuj(String tekst) { // ciało metody } Metoda z parametrami zwracająca wartość nie pustą int Kwadrat(int X) { return X*X; }

Przykłady wywołania metod Metoda bez parametrów nie zwracająca żadnego wyniku Info(); Metoda z parametrami nie zwracająca żadnego wyniku Drukuj("Ala ma kota"); Metoda z parametrami zwracająca wartość int wynik = Kwadrat(5);

Wywołanie metody klasy W kodzie tej samej klasy: nazwametody Na zewnątrz klasy: obiekt.nazwametody class Samochód() { int prędkość; void przyspiesz(int kmh) { prędkość += kmh; } void zwolnij(int kmh) { prędkość -= kmh; } void zatrzymaj() { zwolnij(prędkość); } } void main() { Samochód S1; S1.przyspiesz( 10 ); }

Wartość zwracana przez metodę Każda metoda niezależnie od miejsca jej deklaracji, może zwracać wartość określonego typu w miejscu jej wywołana Instrukcja return zwraca wartość oraz kończy wykonanie metody Metoda może posiadać wiele instrukcji return (ale zadziała tylko jedna) String marka() { } return "Skoda"; System.out.println( S.marka() );

Metody typu void Jeśli metoda nie zwraca żadnej wartości, należy ją zadeklarować jako void (zwrot pustej wartości) Metody typu void mogą używać instrukcji return w celu ukończenia wykonania kodu i powrotu do miejsca wywołania metody Po osiągnięciu ostatniej linijki kodu metody, jej wykonanie zostanie zakończone nawet bez użycia return void wyświetl( int[] T ) { for( int x : T ) System.out.print( x ); }

Parametry metody Metoda może posiadać parametry zmienne dowolnego typu, poprzez które do metody zostaną przekazane wartości argumentów double spalanie_w_trasie( double trasa, int rozchód) { return trasa / rozchód; }

Przeciążanie nazwy metody Jeśli w klasie występuje więcej niż jedna deklaracja metody o tej samej nazwie, mówi się że nazwa metody jest przeciążona (ang. overloaded) Metody przeciążone muszą się różnić liczbą i/lub typem parametrów void jedź( int odległość ) { } void jedź( bool kierunek ) { } void jedź( Trasa t ) { }

Rekurencja Metoda może wołać inne metody W przypadku gdy metoda wywołuje sama siebie, mówi się o rekurencji int Silnia( int N ) { if( N <= 2 ) return N; else return N * Silnia(N-1); }

Rekurencja (c.d.) Metoda rekurencyjna powinna przewidywać zakończenie, tj. przynajmniej jedna gałąź nie może zawierać wywołania tej samej metody Rekurencja b. często pozwala na skrócenie zapisu algorytmu oraz zwiększenie jego czytelności Skutkiem ubocznym może być: Niekończąca się rekurencja Wielokrotne wołanie metody z tymi samymi argumentami Przykład: obliczenie N-tej wartości ciągu Fibonacciego metodą rekurencyjną

Konstruktor klasy Konstruktor metoda klasy o takiej samej nazwie jak nazwa klasy Konstruktor jest wołany w momencie utworzenia obiektu klasy za pomocą instrukcji new Jeśli klasa nie posiada konstruktora w jawnej postaci, jest on generowany automatycznie Samochód S = new Samochód();

Wykorzystanie konstruktora W konstruktorze umieszczamy instrukcje inicjalizacji zmiennych obiektu (nadanie domyślnych wartości) Nie zaleca się umieszczać w konstruktorze instrukcji, które mogą wygenerować wyjątek (Exception) Konstruktor nie ma typu i nie zwraca żadnej wartości Samochód() { przebieg = 0; kolor = Color.white; }

Konstruktor z parametrami W celu inicjalizacji obiektów wartościami innymi niż domyślne, można zdefiniować konstruktor z parametrami Liczba konstruktorów klasy nie jest ograniczona (ważne że muszą się różnić argumentami) Samochód() { } Samochód( int cena ) { } Samochód( int rok, double przebieg ) { }

Wskaźnik na bieżący obiekt this Słowo kluczowe this stosuje się do jawnego wskazania na bieżący obiekt klasy class Samochód() { int przebieg; Samochód(int przebieg) { this.przebieg = przebieg; }

Kiedy this jest potrzebny? Jeśli zmienna lokalna ma taką samą nazwę jak zmienna klasy (można obejść stosując różne nazwy) Kiedy obiekt musi wywołać metodę innego obiektu i przekazać samego siebie jako argument (nie ma obejścia) W celu ułatwienia czytania kodu (opcjonalnie) Przekazanie obiektu przez this

Statyczne pola klasy Wartość pola klasy w każdym z jej obiektów może być różna Jeśli pole ma być wspólnych dla wszystkich obiektów, należy zadeklarować go jako statyczne

Wykorzystanie statycznego pola na zewnątrz klasy Adresacja statycznego pola klasy następuje poprzez nazwę klasy (nie nazwę obiektu!)

Statyczne metody Metoda wspólna dla wszystkich obiektów klasy nazywa się statyczną metodą Statyczna metoda należy do klasy, nie do obiektu Statyczna metoda nie może korzystać z pól oraz metod klasy innych niż statyczne (nie zmienia stanu obiektu!)

Klasy wewnętrzne Klasa w Javie może być zadeklarowana wewnątrz innej klasy Klasa wewnętrzna ma dostęp do pól i metod klasy zewnętrznej