Obiekty: co i jak. Wykonał: Piotr Pięda dla koła naukowego KNI

Podobne dokumenty
Aplikacje w środowisku Java

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe

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

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

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

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

.NET Klasy, obiekty. ciąg dalszy

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Wykład 5 Okna MDI i SDI, dziedziczenie

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

Dokumentacja do API Javy.

Enkapsulacja, dziedziczenie, polimorfizm

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

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

PHP 5 język obiektowy

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Wykład 6: Dziedziczenie

Dziedziczenie. Ogólna postać dziedziczenia klas:

Wykład 4: Klasy i Metody

TEMAT : KLASY DZIEDZICZENIE

Technologie i usługi internetowe cz. 2

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

Rozdział 4 KLASY, OBIEKTY, METODY

Dziedziczenie jednobazowe, poliformizm

Programowanie obiektowe i zdarzeniowe

Definiowanie własnych klas

Aplikacje w środowisku Java

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

Dziedziczenie. dr Jarosław Skaruz

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie obiektowe

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

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

Materiały do zajęć VII

Programowanie komputerowe. Zajęcia 7

Programowanie obiektowe

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

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

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

Języki i metody programowania Java Lab2 podejście obiektowe

Podstawy Języka Java

C++ - [4-7] Polimorfizm

Programowanie obiektowe

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

Mechanizm dziedziczenia

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

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

Programowanie w Internecie. Java

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

Programowanie obiektowe

Związek między pojęciami Zasada podstawialności Podklasy muszą realizować kontrakt zawarty przez nadklasy

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

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

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

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

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

Metody Metody, parametry, zwracanie wartości

Klasy abstrakcyjne, interfejsy i polimorfizm

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

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

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Wykład 9: Polimorfizm i klasy wirtualne

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

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Mechanizm dziedziczenia

Programowanie obiektowe

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

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

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

Programowanie obiektowe w języku

Programowanie obiektowe

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. Metody stałe w klasie

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

Dziedziczenie. Tomasz Borzyszkowski

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.

Polimorfizm. dr Jarosław Skaruz

Informatyka II Laboratorium 3 : Programowania obiektowe C++ - dziedziczenie

Wykład 8: klasy cz. 4

Programowanie obiektowe

Klasy abstrakcyjne i interfejsy

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Spis treści. 1 Java T M

Języki i techniki programowania Ćwiczenia 4 Wzorce

Dziedziczenie & W slajdach są materiały zapożyczone z

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

Definicje klas i obiektów. Tomasz Borzyszkowski

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

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

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

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

Wykład 5: Klasy cz. 3

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego.

Do czego służą klasy?

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Transkrypt:

Obiekty: co i jak Wykonał: Piotr Pięda dla koła naukowego KNI

Co to jest klasa Klasa definuje nowy typ, na jej podstawie budujemy obiekty. Można powiedzieć że jest swego rodzaju matryca dzięki której tworzymy obiekt. Klasa posiada swoje pola i metody, może także dziedziczyć pola i metody po innych klasach. Klasa może także występować w formie uproszczonej Po prawej widzimy przykładową klasę w języku C# z wyszczególnionym, konstruktorem, polami i metodami.

Modyfikatory dostępu Protected - Oznacza że takie elementy będą dostępne dla danej klasy oraz na potrzeby klas dziedziczonych. Nie będą natomiast widoczne na zewnątrz klasy Public - Oznacza że elementy stają się elementami publicznymi, dostępnymi na zewnątrz klasy. Inne klasy będą mogły odwoływać się do owych elementów Private - Elementy z tym modyfikatorem będą oznaczone jako prywatne, a dostęp do nich z poza klasy, będzie niemożliwy. Internal - Elementy z tym modyfikatorem są dostępne tylko z wnętrza złożenia, w którym nastąpiła ich deklaracja (podczas kompilacji pliki.cs z kodem źródłowym programu są kompilowane w moduły, zgodnie z podziałem na przestrzenie nazw, a następnie grupowane w złożenia, ang. assembly) protected internal - Element zadeklarowana z takim rodzajem dostępu jest widoczna z wnętrza klasy, w której została zadeklarowany (lub klasy pochodnej od niej) oraz z wnętrza złożenia, w którym się znajduje.

Obiekt Sama klasa nic jeszcze nam nie daje, musimy zadeklarować element takiej klasy. Obiekt budujemy zgodnie z konstruktorem podając w nawiasie() konieczne wartości, jeśli klasa nie posiada konstruktora to znaczy ze pozostawiamy nawias pusty. Na obiekcie wywołujemy także pewne metody zadeklarowane w klasie metody o ile pozwala na to jej modyfikator dostępu. Możemy także uzyskać dostęp do pól naszych metod o ile pozwala na to modyfikator dostępu. Mając klasę z poprzedniego przykładu tworzymy więc obiekt i trochę go przerabiamy static void Main(string[] args) PierwszaKlasa pr = new PierwszaKlasa(2,2); //deklarujemy obiet o nazwie pr pr.wyswietlab(); // wywołujemy metodę dla obiektu System.Console.ReadKey(); // pauza pr.a = 3; // Uzyskujemy dostęp do pola a pr.wyswietlab(); // ponownie wyświetlamy System.Console.ReadKey();

Metody tak samo jak konstruktor mogą wymagać podania pewnych parametrów, i ich właściwa budowa bardzo przypomina budowę konstruktora z tym że metoda może zwracać jakąś wartość np. jeśli dopiszemy do naszej klasy następującą metodę. public int Dodaj(int d) // zamiast void podajemy typ zwracany a = a + d; b = b + d; d = a + b; return d; // wyrażenie zwraca wartość zmiennej d To widzimy że powiększa ona wartości w polach a i b oraz zwraca ich sumę, czyli można traktować ją jako argument.

Istnieją w języku pola i metody statyczne deklarowane z użyciem słowa kluczowego static. Do metod statycznych możemy się odwoływać bez potrzeby deklarowania obiektu klasy z której metoda pochodzi. Zaletą jest możliwość napisania metody która policzy nam np. sumę 2 liczb bez deklarowania jakichś obiektów, wadą jest to że nie możemy metody wywołać na rzecz jakiegoś obiektu. class Dodawanie // <metoda zwykla> public int Metoda (int b, int a) return (a + b); // <metoda statyczna> public static int MetodaStatyczna(int a, int b) return (a + b); Próba wywołania Metoda(1,2); nie powiedzie się bez zadeklarowania

Oprócz metod także zmienne mogą być statyczne. Różnią się one standardowych zmiennych tym, że są wspólne dla wszystkich obiektów klasy, w której znajdują się deklaracje owych zmiennych. Mówiąc prościej pole statyczne będzie miała taką samą wartość dla wszystkich zadeklarowanych obiektów Klasy Sytuacje tę obrazuje kod z następnego slajdu

class KlasaP public static string napis; public void Napisz() System.Console.WriteLine(napis); class Program static void Main(string[] args) KlasaP o1 = new KlasaP(); KlasaP o2 = new KlasaP(); KlasaP.napis = "pierwszy napis ; o1.napisz(); o2.napisz(); System.Console.ReadKey(); KlasaP.napis = "napis po zmianie"; o1.napisz(); o2.napisz(); System.Console.ReadKey();

Dziedziczenie Jak już wiemy klasy posiadają pola ale np. mając klasę 2D która to posiada pola x i y odnoszące się do współrzędnych cichlibyśmy uzyskać klasę dla obiektów 3D Wiemy że obiekty 3D także mają współrzędne x i y, ale posiadają takę współrzędna z. I tu właśnie wkracza dziedziczenie, można napisać klasę która odziedziczy po 2D pola i metody i w tejże nowej klasie dodać nowe pole zamiast przepisywać kod starej klasy.

public override void Wyswietl() System.Console.WriteLine("x = 0 y = 1 z = 2", x, y, z + "."); public class P2d public int x; public int y; public virtual void Wyswietl() System.Console.WriteLine("x = 0 a y = 1", x, y + "."); public class P3d : P2d public int z; class Program static void Main(string[] args) P2d o1 = new P2d(); P3d o2 = new P3d(); o1.x = 1; o1.y = 2; o1.wyswietl(); System.Console.ReadKey(); o2.x = 3; o2.y = 4; o2.z = 5; o2.wyswietl(); System.Console.ReadKey();

W poprzednim przykładzie mieliśmy ciekawą deklarację drugiej klasy public class P3d : P2d Dwukropek i nazwa innej klasy oznaczają że klasa P3d dziedziczy po klasie P2d pola i metody. Jak widać mimo że nie ma w jej kodzie bezpośrednio zadeklarowanych pól x i y oraz metody do ich wyświetlania to udało się je wyświetlić. Ale czy zauważyliście te dziwne modyfikatory virtual i override przy metodach?

Przesłanianie Dzieki słowu kluczowemu virtual mogę stworzyć metodę jako wirtualną a dzięki temu mogę w przyszłości w klasach dziedziczących przesłonić ją tworząc nową metodę o identycznej nazwie ale z modyfikatorem override. Taka metoda wirtualna może być w zasadzie pusta i nie robić nic, czyli stanowić szkielet dla metod budowanych w przyszłości Oczywiście czasem się zdarza że chcemy w takiej przesłoniętej metodzie wywołać starą metodę, można tego łatwo dokonać wpisując base.wyswietl(); public override void Wyswietl() base.wyswietl(); System.Console.WriteLine("x = 0 y = 1 z = 2", x, y, z + "."); Tak jak w przypadku powyżej. Teraz wywołanie wyśietli nam najpierw

Wspomniałem o konstruktorach klasy dzięki którym pewne działania jak np. deklaracje pól obiektu można załatwić w już przy deklaracji obiektu tak jak tu PierwszaKlasa pr = new PierwszaKlasa(2,2); Nasz konstruktor także można przesłnić w sposób pokazany poniżej public class PierwszaKlasa public int a; public int b; //konstruktor klasy A, ktory przyjmuje dwie liczby calkowite public PierwszaKlasa(int a, int b) this.a = a; this.b = b; public class DrugaKlasa : PierwszaKlasa public int c; //dodatkowy parametr w konstruktorze, wywolujemy rowniez konstruktor klasy bazowej public DrugaKlasa(int a, int b, int c) : base(a, b)

Przeciążanie metod A co zrobić gdy chcemy aby jedna metoda statyczna dodawała nam 2 liczy lub 3 liczby. Jest to całkiem możliwe dzięki przeciązaniu. Przeciążenie pozwala na zadeklarowanie kilku metod o takiej samej nazwie ale o zmienionej liczbie parametrów jaką ta metoda przyjmuje, lub zmianie typu parametrów metody. Dzieki temu program sam wybierze rodzaj metody najbardziej odpowiedni dla przyjętych parametrów

class Prz public void Dodaj(int a) System.Console.WriteLine("Brak drugiej liczby do dodania."); public void Dodaj(int a, int b) System.Console.WriteLine("a+b="+a+b); public void Dodaj(double a, double b) System.Console.WriteLine("liczby rzeczywiste a =0 i b =1", a, b); class Program static void Main(string[] args) Prz obiekt = new Prz(); obiekt.dodaj(1); System.Console.ReadKey(); obiekt.dodaj(1, 2); System.Console.ReadKey(); obiekt.dodaj(1.1, 2.3); System.Console.ReadKey();

Dziękuję za uwagę: Polecam zapoznać się z serią artykułów o C# http://www.centrumxp.pl/dotnet/1040,1,01 _Zmienne_sta%C5%82e_wyra%C5% BCenia_i_odst%C4%99py.aspx Jest to link do pierwszego artykułu pozostałe można znaleźć na stronie www po prawej.

Wykonał: Piotr Pięda Dla koła naukowego KNI Bibliografia: http://www.centrumxp.pl http://4programmers.net/c_sharp/wprowadzenie