Programowanie obiektowe

Podobne dokumenty
Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Dziedziczenie. Zadanie 1

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe

Technologie i usługi internetowe cz. 2

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

TEMAT : KLASY DZIEDZICZENIE

.NET Klasy, obiekty. ciąg dalszy

Diagramy klas. dr Jarosław Skaruz

Programowanie obiektowe

Programowanie obiektowe

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Klasy abstrakcyjne i interfejsy

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

Języki programowania imperatywnego

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

Aplikacje w środowisku Java

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Enkapsulacja, dziedziczenie, polimorfizm

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

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

Zaawansowane programowanie w C++ (PCP)

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

Technologie obiektowe

Programowanie obiektowe - 1.

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

Wykład 5 Okna MDI i SDI, dziedziczenie

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

Zaawansowane programowanie w C++ (PCP)

Wykład 9: Polimorfizm i klasy wirtualne

Kurs WWW. Paweł Rajba.

Aplikacje w środowisku Java

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

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

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie obiektowe

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

Podstawy Języka Java

Wykład 8: klasy cz. 4

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Dziedziczenie. dr Jarosław Skaruz

Mechanizm dziedziczenia

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

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

Podstawy programowania obiektowego

Narzędzia 2. dr inż. Tadeusz Jeleniewski

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

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

PHP 5 język obiektowy

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

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

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

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Język programowania. Andrzej Bobyk

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

PRZEWODNIK PO PRZEDMIOCIE

Programowanie obiektowe

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

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

Dziedziczenie jednobazowe, poliformizm

Język Java część 2 (przykładowa aplikacja)

Interfejsy i klasy wewnętrzne

UML a kod. C++, Java i C#

Wykład 1: Wprowadzenie

Laboratorium 1 - Programowanie proceduralne i obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Java Język programowania

Programowanie obiektowe w języku

Język Java część 2 (przykładowa aplikacja)

TEMAT : KLASY POLIMORFIZM

Materiały do zajęć VII

Rok akademicki: 2012/2013 Kod: EAR s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) stacjonarne (stacjonarne / niestacjonarne)

10. Programowanie obiektowe w PHP5

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Modelowanie obiektowe

Dokumentacja do API Javy.

Programowanie obiektowe

Podstawy Programowania Obiektowego

Przychodnia 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę Osoba.

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Zaawansowane programowanie obiektowe - wykład 5

Programowanie obiektowe 2 - opis przedmiotu

Definiowanie własnych klas

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

Programowanie obiektowe

Transkrypt:

Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych zajęć tematyka jest ważna, gdyż dziedziczenie i polimorfizm są mechanizmami wykorzystywanymi powszechnie w programowaniu obiektowym. Aby ze zrozumieniem zrealizować zadania, przewidziane do wykonania w ramach zajęć laboratoryjnych, należy znać znaczenie pojęć takich jak: dziedziczenie, klasa bazowa, klasa potomna, polimorfizm, metoda wirtualna, kolekcja List<T> i jej podstawowa funkcjonalność. Należy również znać podstawy języka modelowania systemów informatycznych UML. 1. Dziedziczenie Dziedziczenie polega na tworzenie nowej klasy na podstawie klasy już istniejącej. W języku C# dziedziczeniu podlegają: pola klasy, właściwości oraz metody. Podobnie jak w C++ elementy klasy, które w klasie bazowej zostały oznaczone jako public lub protected, w klasie potomnej również będą miały ten sam zakres widoczności, natomiast elementy oznaczone jako private lub internal nie podlegają dziedziczeniu. Mechanizm dziedziczenia przedstawia poniższy przykład: Przykład 1 Dziedziczenie 1

Proszę zwrócić szczególną uwagę na linię kodu numer 32, w której wywoływany jest konstruktor klasy bazowej. W języku C# do wywołania konstruktora klasy bazowej wykorzystywane jest słowo kluczowe base. Klasa bazowa (na przykładzie 1 - Budynek ) to klasa, po której dziedziczy inna klasa nazywana klasą potomną (na przykładzie 1 - BudynekMieszkalny ). 2. Polimorfizm Pojęcie polimorfizmu odnosi się do klas, które współdzielą te same metody, ale implementują je w różny sposób. W praktyce oznacza to, że klasa potomna dziedzicząca daną metodę z klasy bazowej, może przypisać jej zupełnie inną funkcjonalność. Mechanizm polimorfizmu przedstawia poniższy przykład: Przykład 2 Polimorfizm 2

Proszę zwrócić uwagę na sposób działania metody WypiszInfo. W linii 60 zostaje wywołana metoda klasy bazowej, natomiast w liniach 62, 64 zostaje wywołana metoda klasy potomnej. Proszę zauważyć, że w linii 63 do zmiennej typu Budynek zostaje przypisany obiekt BudynekMieszkalny, a w linii 64 zostaje wywołana metoda WypiszInfo z klasy potomnej. Zadziałał tu mechanizm polimorfizmu. Metody z klasy bazowej, które mogą zostać przesłonione przez metody o tej samej nazwie z klasy potomnej, należy oznaczyć modyfikatorem virtual (linia 25 w przykładzie 2). Metody te są metodami wirtualnymi. Metody z klasy potomnej, które mają przesłonić metodę o tej samej z klasy bazowej, należy oznaczyć modyfikatorem override (linia 49 w przykładzie 2). 3. Kolekcja List<T> Kolekcje to pojęcia stosowane w odniesieniu do klas, które umożliwiają przechowywanie oraz efektywne przetwarzanie obiektów danego typu. Jedną z największych zalet kolekcji jest możliwość dynamicznej zmiany ich rozmiaru liczba przechowywanych przez kolekcje elementów nie jest ograniczona w momencie utworzenia danej kolekcji, tak jak ma to miejsce w przypadku tablicy. Jednym z podstawowych typów kolekcji jest lista - List<T>. Proste operacje wykonywane na liście zostaną przedstawione do celów niniejszego laboratorium. Szczegółowe omówienie możliwości listy i innych kolekcji nastąpi na wykładzie. Informacje dotyczące kolekcji List<T> niezbędne do wykonania zadania laboratoryjnego: Klasa List<T> została zdefiniowana w przestrzeni nazw System.Collections.Generic. Litera T oznacza typ obiektów przechowywanych przez listę. Utworzenie obiektu listy odbywa się za pomocą konstrukcji: List<T> nazwalisty = new List<T>( ) gdzie T stanowi nazwę typu przechowywanego obiektu. Podstawowe metody i właściwości listy prezentuje poniższy przykład: 3

Przykład 3 Metody kolekcji List<T> 4. UML dziedziczenie na diagramie klas Dziedziczenie w języku UML oznaczane jest za pomocą strzałki z pustym grotem wskazującym na klasę bazową. Rys. 1 Reprezentacja dziedziczenia języku UML 4

Zadanie 1. Proszę zrealizować aplikację obiektową, która powinna odznaczać się następującymi cechami: Aplikacja powinna zawierać klasy zaimplementowane zgodnie z zamieszczonym poniżej diagramem klas. Metody WypiszInfo powinny wypisywać na konsoli informacje na temat wartości wszystkich pól obiektów. Metoda WypiszInfo klasy Osoba powinna być wirtualna, metody WypiszInfo w klasach pochodnych ( Student, Piłkarz ), powinny ją przesłaniać. Metoda StrzelGola powinna zwiększać o 1 wartość pola liczbagoli. Aby zrealizować zadanie należy wykonać następujące kroki: Proszę o implementację klasy bazowej Osoba, jej pól i metod. Proszę pamiętać o modyfikatorze virtual, który powinna posiadać metoda WypiszInfo. Proszę o implementację klasy pochodnej Student, jej pól i metod. Proszę pamiętać o modyfikatorze override, który powinna posiadać metoda WypiszInfo. Proszę o implementację klasy pochodnej Pilkarz, jej pól i metod. Proszę pamiętać o modyfikatorze override, który powinna posiadać metoda WypiszInfo. Proszę o przetestowanie poprawności wykonania zadania za pomocą kodu testowego: 5

Przy ocenie zadania główny nacisk będzie kładziony na: Prawidłową implementację dziedziczenia. Prawidłowy dobór modyfikatorów dostępu. Zadanie 2. Proszę zrealizować aplikację obiektową, która powinna odznaczać się następującymi cechami: Aplikacja stanowi rozszerzenie aplikacji z zadania nr 1. Aplikacja powinna zawierać klasy zaimplementowane zgodnie z zamieszczonym poniżej diagramem klas. Obiekty klasy Student powinny przechowywać kolekcję obiektów klasy Ocena za pomocą listy. Metoda DodajOcene ma dodawać ocenę do listy ocen studenta. Metoda WypiszOceny( ) ma wypisywać informacje o wszystkich ocenach studenta. Metoda WypiszOceny(string nazwaprzedmiotu) ma wypisywać informacje o ocenach studenta z przedmiotu o podanej nazwie. Metoda UsunOcene ma usuwać ocenę studenta o podanych parametrach. Metoda UsunOceny( ) ma usuwać wszystkie oceny studenta. Metoda UsunOceny(string nazwaprzedmiotu) ma usuwać wszystkie oceny studenta z przedmiotu o podanej nazwie. Metoda WypiszInfo z klasy Student ma wypisywać także informacje o wszystkich ocenach studenta. 6

Aby zrealizować zadanie należy wykonać następujące kroki: Proszę o implementację klasy Ocena, jej pól i metod. Proszę o implementację w klasie Student następującego pola: Następnie proszę o dołączenie do projektu przestrzeni nazw System.Colections.Generic, z której pochodzi używana kolekcja typu List<T>, poprzez dopisanie na początku kodu instrukcji: Proszę o implementację metody DodajOcene w klasie Student. Metoda ta ma tworzyć nowy obiekt typu Ocena i dodawać go do listy ocen za pomocą metody Add obiektu typu List<Ocena>. Proszę o implementację metody WypiszOceny, która ma wypisywać na konsoli wszystkie oceny studenta. Metoda ta powinna być zaimplementowana przy użyciu pętli foreach lub pętli for. W tym celu niezbędna będzie także implementacja odpowiednich właściwości w klasie Ocena. Proszę o implementację metody WypiszOceny (string nazwaprzedmiotu), która ma wypisywać na konsoli wszystkie oceny studenta z przedmiotu o podanej nazwie. Metoda ta powinna być zaimplementowana przy użyciu pętli foreach lub pętli for. Proszę o implementację metody UsunOcene, która ma usuwać z listy ocen oceny o podanych parametrach. Do tego celu należy użyć pętli for : 7

UWAGA! W języku C# istnieje prostszy sposób realizacji usunięcia z kolekcji obiektów o podanych parametrach. Sposób ten zostanie przedstawiony na jednym z kolejnych wykładów. Proszę o implementację metody UsunOceny, która ma usuwać z listy ocen wszystkie oceny. Do tego celu należy użyć metody Clear kolekcji typu List<Ocena>. Proszę o implementację metody UsunOceny (string nazwaprzedmiotu), która ma usuwać z listy ocen oceny z przedmiotu o podanej nazwie. Proszę o modyfikację metody WypiszInfo z klasy Student. Ma ona wypisywać także listę wszystkich ocen studenta. Proszę o przetestowanie poprawności wykonania zadania za pomocą poniższego kodu, który ma zostać dodany do kodu testowego z poprzedniego zadania: Przy ocenie zadania główny nacisk będzie kładziony na: Poprawną implementację metod. 8

Prawidłowy dobór modyfikatorów dostępu. Zadanie do domu. Proszę zrealizować aplikację obiektową, która powinna odznaczać się następującymi cechami: Zadanie do domu jest rozszerzeniem zadania 1. Ilustruje je poniższy diagram klas. Proszę o utworzenie klas PilkarzNozny i PilkarzReczny, które dziedziczą po klasie Pilkarz. Metoda StrzelGola w klasie PilkarzReczny ma wywoływać metodę StrzelGola z klasy bazowej, a ponadto wypisywać na ekranie konsoli komunikat Ręczny strzelił!. Metoda StrzelGola w klasie PilkarzNozny ma wywoływać metodę StrzelGola z klasy bazowej, a ponadto wypisywać na ekranie konsoli komunikat Nożny strzelił!. Uwagi: Metoda StrzelGola w klasie Pilkarz powinna być wirtualna, a jej odpowiedniki w klasach potomnych powinny ją przesłaniać. Metody StrzelGola z klas potomnych powinny odwoływać się do swoich odpowiedników za pomocą słowa kluczowego base poprzez konstrukcję: base.<nazwa metody> 9

Zagadnienia, które należy uznać za przyswojone w trakcie zajęć. Po zajęciach będzie obowiązywać praktyczna znajomość: Pojęcia dziedziczenia i polimorfizmu. Tworzenie metod wirtualnych i ich przesłanianie. Wykonywanie prostych operacji na kolekcjach List z przestrzeni nazw System.Collections.Generic. Przedstawienie dziedziczenia na diagramie klas. Zagadnienia do powtórzenia na następne zajęcia. Przed kolejnymi zajęciami należy powtórzyć następujące zagadnienia: Klasy abstrakcyjne. Interfejsy. 10