Programowanie obiektowe



Podobne dokumenty
Programowanie obiektowe

Wykład 4: Klasy i Metody

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie obiektowe

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

Kurs WWW. Paweł Rajba.

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

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

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

Wykład 5: Klasy cz. 3

Klasy abstrakcyjne, interfejsy i polimorfizm

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

Programowanie obiektowe

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

Dokumentacja do API Javy.

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

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

Platformy Programistyczne Podstawy języka Java

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.

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

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

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

Programowanie Obiektowe i C++

Laboratorium 1 - Programowanie proceduralne i obiektowe

Programowanie obiektowe

Dziedziczenie. dr Jarosław Skaruz

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

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

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

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

Programowanie obiektowe

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Programowanie w Internecie. Java

10. Programowanie obiektowe w PHP5

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

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Polimorfizm. dr Jarosław Skaruz

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Technologie i usługi internetowe cz. 2

Aplikacje w środowisku Java

Definiowanie własnych klas

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

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

Przypomnienie o klasach i obiektach

Wprowadzenie do programowanie obiektowego w języku C++

Mechanizm dziedziczenia

Enkapsulacja, dziedziczenie, polimorfizm

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

Wstęp do Programowania 2

Dziedziczenie jednobazowe, poliformizm

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

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Kompozycja i dziedziczenie klas

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

Materiały do zajęć VII

Java: interfejsy i klasy wewnętrzne

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

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

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

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

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

Programowanie obiektowe

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

Programowanie obiektowe

Klasy i obiekty cz I Klasy, obiekty, podstawy używania obiektów

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

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

Klasy abstrakcyjne i interfejsy

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

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Programowanie obiektowe

TEMAT : KLASY DZIEDZICZENIE

Programowanie, część I

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

Konstruktor kopiujacy

Microsoft IT Academy kurs programowania

Mechanizm dziedziczenia

Programowanie obiektowe i zdarzeniowe

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie, część I

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

Programowanie obiektowe

Wykład 7: Pakiety i Interfejsy

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

Aplikacje w środowisku Java

Dziedziczenie. Tomasz Borzyszkowski

Multimedia JAVA. Historia

Programowanie obiektowe w języku

Transkrypt:

Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015

Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47

Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Marcin Młotkowski Programowanie obiektowe 3 / 47

Język C Krótka historia C 1.0 rok 2001 2002 2.0 rok 2002 2005 3.0 rok 2005 2006 4.0 rok 2006 2010 5.0 Marcin Młotkowski Programowanie obiektowe 4 / 47

Implementacje.NET Framework (Microsoft) Mono (Ximian, obecnie: Novell) Marcin Młotkowski Programowanie obiektowe 5 / 47

Implementacje.NET Framework (Microsoft) Mono (Ximian, obecnie: Novell) ROTOR (Microsoft) DotGNU Marcin Młotkowski Programowanie obiektowe 5 / 47

C# czy C? Marcin Młotkowski Programowanie obiektowe 6 / 47

C# czy C? C# C-hash C "C krzyżyk" (cis) Marcin Młotkowski Programowanie obiektowe 6 / 47

Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 7 / 47

Przykładowe zadanie Ewidencja pojazdów: co chcemy mieć w systemie: samochody osobowe, samochody ciężarowe, tramwaje; co chcemy wiedzieć: marka, rok produkcji, rejestracja; co chcemy robić: drukować informacje o danych. Marcin Młotkowski Programowanie obiektowe 8 / 47

Przykładowe zadanie Ewidencja pojazdów: co chcemy mieć w systemie: samochody osobowe, samochody ciężarowe, tramwaje; co chcemy wiedzieć: marka, rok produkcji, rejestracja; co chcemy robić: drukować informacje o danych. Marcin Młotkowski Programowanie obiektowe 8 / 47

Schemat zależności między obiektami rzeczywistymi Pojazd Samochód Tramwaj Osobowy Ciężarówka Marcin Młotkowski Programowanie obiektowe 9 / 47

Schemat zależności między obiektami rzeczywistymi Pojazd marka rejestracja rok_prod info() Samochód Tramwaj liczba_pasażerów Osobowy moc_silnika Ciężarówka ładowność Marcin Młotkowski Programowanie obiektowe 9 / 47

Implementacja w C Klasa podstawowa class Pojazd { public string marka; public string rejestracja; public string rok_prod; public void info() { Console.WriteLine("Marka: {0, rocznik: {1", marka, rok_prod); Marcin Młotkowski Programowanie obiektowe 10 / 47

Deklaracja podklasy A jak zamiplementować klasę Samochód class Samochod : Pojazd { bool hybryda; public void info() { base.info(); Console.WriteLine("hybryda: {0", hybryda); Marcin Młotkowski Programowanie obiektowe 11 / 47

Analiza przykładu Klasa Pojazd definiuje pole marka pole rejestracja pole rok_prod metodę info() Klasa Samochód dziedziczy pole marka pole rejestracja pole rok_prod Klasa Samochód dodaje pole hybryda Klasa Samochód definiuje na nowo metodę info() Marcin Młotkowski Programowanie obiektowe 12 / 47

Uzupełnienie 1. Dostęp do metody nadklasy public void info() { base.info(); Console.WriteLine("hybryda: {0", hybryda); To jeszcze nie jest poprawny program. Marcin Młotkowski Programowanie obiektowe 13 / 47

Uzupełnienie 2. Rozwiązanie konfliktu class Pojazd { public void info() {... class Samochod : Pojazd { public void info() {... Marcin Młotkowski Programowanie obiektowe 14 / 47

Uzupełnienie 2. Rozwiązanie konfliktu class Pojazd { virtual public void info() {... class Samochod : Pojazd { override public void info() {... Marcin Młotkowski Programowanie obiektowe 14 / 47

Uzupełnienie 3. W większości języków jest dostępna domyślnie klasa Object będąca nadklasą (superklasą) wszystkich innych klas. Marcin Młotkowski Programowanie obiektowe 15 / 47

Jak utworzyć obiekt Instrukcja new Klasa var; var = new Klasa(); Marcin Młotkowski Programowanie obiektowe 16 / 47

Jak utworzyć obiekt Instrukcja new Klasa var; var = new Klasa(); Do utworzenia obiektu konieczna jest klasa! Marcin Młotkowski Programowanie obiektowe 16 / 47

Inne metody tworzenia obiektów Klonowanie obiektów Klasa varprim; varprim = var.clone(); a a Uwaga: małe oszustwo Marcin Młotkowski Programowanie obiektowe 17 / 47

Inne metody tworzenia obiektów Klonowanie obiektów Klasa varprim; varprim = var.clone(); a a Uwaga: małe oszustwo Fabryki obiektów Pojazd = FPM.construct("tramwaj"); Marcin Młotkowski Programowanie obiektowe 17 / 47

Każde wywołanie metody jest związane z obiektem. Marcin Młotkowski Programowanie obiektowe 18 / 47

Przykłady Samochod bryczka = new Samochod(); bryczka.info(); Marcin Młotkowski Programowanie obiektowe 19 / 47

Przykłady Samochod bryczka = new Samochod(); bryczka.info(); Marcin Młotkowski Programowanie obiektowe 19 / 47

Przykłady Samochod bryczka = new Samochod(); bryczka.info(); Marcin Młotkowski Programowanie obiektowe 19 / 47

Zagadka Jak wywołać w metodzie własną metodę? Marcin Młotkowski Programowanie obiektowe 20 / 47

Przykład class Rekurencja { public int gcd(int x, int y) { if (x == 0) return y; return???gcd(y mod x, x); Marcin Młotkowski Programowanie obiektowe 21 / 47

Przykład class Rekurencja { public int gcd(int x, int y) { if (x == 0) return y; return this.gcd(y mod x, x); Marcin Młotkowski Programowanie obiektowe 21 / 47

Zmienna this(base) Co warto wiedzieć o this: this jest zmienną obiektu wskazującą na obiekt; this można użyć tylko w metodach; this jest zawsze domyślnie zadeklarowane; nie można zmieniać wartości this. Marcin Młotkowski Programowanie obiektowe 22 / 47

Inne zastosowania this class Element { public Element next; public void set(element e) { this.next = e; e.next = this; Marcin Młotkowski Programowanie obiektowe 23 / 47

Inne zastosowania this class Element { public Element next; public void set(element e) { this.next = e; e.next = this; Element a = new Element(); Element b = new Element(); Element c; a.set(b); c = a; while (c!= null) c = c.next; Marcin Młotkowski Programowanie obiektowe 23 / 47

Uwagi o this zwykle nie jest konieczne używanie this return this.gcd(y mod x, x); Marcin Młotkowski Programowanie obiektowe 24 / 47

Uwagi o this zwykle nie jest konieczne używanie this return gcd(y mod x, x); Marcin Młotkowski Programowanie obiektowe 24 / 47

Uwagi o this zwykle nie jest konieczne używanie this return gcd(y mod x, x); this może być konieczne do rozstrzygnięcia niejednoznaczności int x; public void set(int x) { this.x = x; Marcin Młotkowski Programowanie obiektowe 24 / 47

Tablice w C Tablice to też obiekty! Marcin Młotkowski Programowanie obiektowe 25 / 47

Deklarowanie i inicjowanie tablic Deklaracja tablicy Pojazd[ ] parking; Marcin Młotkowski Programowanie obiektowe 26 / 47

Deklarowanie i inicjowanie tablic Deklaracja tablicy Pojazd[ ] parking; Inicjowanie tablicy parking = new Pojazd[2]; Marcin Młotkowski Programowanie obiektowe 26 / 47

Deklarowanie i inicjowanie tablic Deklaracja tablicy Pojazd[ ] parking; Inicjowanie tablicy parking = new Pojazd[2]; Wszystko razem Pojazd[ ] parking = new Pojazd[100]; Uwaga: wszystkie miejsca w tablicy mają wartość null! Marcin Młotkowski Programowanie obiektowe 26 / 47

Przetwarzanie tablic parking[0] = new Pojazd(); parking[1] = new Samochod(); foreach(pojazd p in parking) p.info(); Marcin Młotkowski Programowanie obiektowe 27 / 47

Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 28 / 47

Domyślna widoczność pól i metod Jeśli nie określono inaczej, pola i metody są niewidoczne z zewnątrz. Marcin Młotkowski Programowanie obiektowe 29 / 47

Przykład Przykładowa klasa class Klasa { string identyfikator; void info() { Console.WriteLine("Ident: {0", this.identyfikator);

Przykład Przykładowa klasa class Klasa { string identyfikator; void info() { Console.WriteLine("Ident: {0", this.identyfikator); Dobrze Klasa obj = new Klasa()

Przykład Przykładowa klasa class Klasa { string identyfikator; void info() { Console.WriteLine("Ident: {0", this.identyfikator); Dobrze Klasa obj = new Klasa() Źle obj.identyfikator; obj.info();

Poprawka Przykładowa klasa class Klasa { string identyfikator; public void info() { Console.WriteLine("Ide: {0", this.identyfikator); Klasa obj = new Klasa()

Poprawka Przykładowa klasa class Klasa { string identyfikator; public void info() { Console.WriteLine("Ide: {0", this.identyfikator); Klasa obj = new Klasa() Źle obj.identyfikator Dobrze obj.info();

Dziedziczenie a widoczność class Klasa { string identyfikator; public void info() { Console.WriteLine("Ident: {0", this.identyfikator); Klasa obj = new Klasa() class Podklasa : Klasa { public void myinfo() { Console.WriteLine("Ident: {0", this.identyfikator); Marcin Młotkowski Programowanie obiektowe 32 / 47

Widoczność w podklasie class Klasa { string protected identyfikator; public void info() { Console.WriteLine("Ident: {0", this.identyfikator); Marcin Młotkowski Programowanie obiektowe 33 / 47

Podsumowanie Poziomy dostępu do metod i pól private (domyślny) tylko metody zdefiniowane w tej samej klasie; protected widoczność w podklasie public wszędzie. Marcin Młotkowski Programowanie obiektowe 34 / 47

Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 35 / 47

Stan początkowy obiektu Ustalanie początkowych wartości zmiennych wartości domyślne ustalone w standardzie języka; przypisanie wartości w momencie utworzenia zmiennej; implementacja konstruktora. Marcin Młotkowski Programowanie obiektowe 36 / 47

Wartości domyślne zmiennych bool false; string ""; zmienna typu klasa null Marcin Młotkowski Programowanie obiektowe 37 / 47

Wartości domyślne zmiennych Uwaga bool false; string ""; zmienna typu klasa null Można też przypisywać domyślne wartości funkcją default: typ zmienna = default(typ); Marcin Młotkowski Programowanie obiektowe 37 / 47

Przypisanie wartości w miejscu deklaracji int x = 12; Element e = new Element(); Marcin Młotkowski Programowanie obiektowe 38 / 47

Konstruktor Cechy konstruktora konstruktor to metoda, ale specjalna; jest to metoda wywoływana natychmiast po utworzeniu obiektu; konstruktor ma nazwę taką jak nazwa klasy; konstruktorów nie można jawnie wywoływać (prawie ;-); konstruktorów może być kilka. Marcin Młotkowski Programowanie obiektowe 39 / 47

Deklaracja konstruktora class Pojazd { string marka; int rok_prod; public Pojazd() { this.marka = "Syrena"; this.rok_prod = 2010; public Pojazd(string marka) { this.marka = marka; Marcin Młotkowski Programowanie obiektowe 40 / 47

Deklaracja konstruktora class Pojazd { string marka; int rok_prod; public Pojazd() { this.marka = "Syrena"; this.rok_prod = 2010; public Pojazd(string marka) { this.marka = marka; Użycie konstruktora Pojazd p = new Pojazd(); Pojazd w = new Pojazd("wehikuł czasu"); Marcin Młotkowski Programowanie obiektowe 40 / 47

i dziedziczenie class Pojazd { string marka = ""; public Pojazd(string marka) { this.marka = marka; public Pojazd() { this.marka = "syrena"; class Samochod : Pojazd { boolean gaz; public Samochod(string marka, boolean gaz): base(marka) { this.gaz = gaz; public Samochod() { /* Automatyczne wywołanie konstruktora klasy Pojazd */

Destruktor Destruktor (finalizator) to bezparametrowa metoda wywoływana przy usuwaniu obiektu z pamięci. Przykład class Klasa { Klasa() {... Marcin Młotkowski Programowanie obiektowe 42 / 47

Destruktor Destruktor (finalizator) to bezparametrowa metoda wywoływana przy usuwaniu obiektu z pamięci. Przykład class Klasa { Klasa() {... Uwaga Nie wiadomo, kiedy obiekt będzie usunięty z pamięci, być może dopiero po zakończeniu programu. Marcin Młotkowski Programowanie obiektowe 42 / 47

Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 43 / 47

Początek programu Początkiem programu jest publiczna statyczna metoda Main Przykład class MojProgram { public static void Main() {... Marcin Młotkowski Programowanie obiektowe 44 / 47

Rozszerzenia plików Domyślnym rozszerzeniem pliku jest *.cs Marcin Młotkowski Programowanie obiektowe 45 / 47

Przykład programu plik.cs using System; class Pojazd {... class Samochod : Pojazd {... class MojProgram { public static void Main() { Console.WriteLine("Hello world"); Marcin Młotkowski Programowanie obiektowe 46 / 47

Kompilacja i wykonanie Środowiska zintegrowane MS Windows: Visual Studio Linux: MonoDevelop Linux, środowisko Mono $ mcs plik.cs a $ mono plik.exe a W starszych wersjach: gmcs, smcs, dmcs MS Windows C:\Moje Dokumenty> csc plik.cs C:\Moje Dokumenty> plik.exe Marcin Młotkowski Programowanie obiektowe 47 / 47