Napisaæ klasê implementuj¹c¹ wiele interfejsów. Zrealizowaæ metody interfejsu, u ywaj¹c techniki jawnej implementacji interfejsu.

Wielkość: px
Rozpocząć pokaz od strony:

Download "Napisaæ klasê implementuj¹c¹ wiele interfejsów. Zrealizowaæ metody interfejsu, u ywaj¹c techniki jawnej implementacji interfejsu."

Transkrypt

1 Rozdzia³ Dziedziczenie Rozdzia³ 12 Dziedziczenie Rozdzia³ 12 Dziedziczenie Czêœæ II Zrozumieæ jêzyk C# Szacunkowy czas 60 min. W tym rozdziale dowiesz siê, jak: Utworzyæ klasê pochodn¹, która dziedziczy po klasie bazowej. Wywo³aæ konstruktor klasy bazowej z konstruktora klasy pochodnej. Sterowaæ ukrywaniem i przes³anianiem metod za pomoc¹ s³ów kluczowych new, virtual i override. Ograniczaæ dostêpnoœæ klasy w hierarchii dziedziczenia za pomoc¹ s³owa kluczowego protected. Tworzyæ interfejs zawieraj¹cy tylko nazwy metod. Implementowaæ interfejs w strukturze lub klasie, pisz¹c treœæ metod. Zawrzeæ wspólne funkcje implementacji w klasie abstrakcyjnej. Zadeklarowaæ, e z klasy nie mo na wywodziæ nowych klas, za pomoc¹ s³owa kluczowego sealed. Napisaæ klasê implementuj¹c¹ wiele interfejsów. Zrealizowaæ metody interfejsu, u ywaj¹c techniki jawnej implementacji interfejsu. Co to jest dziedziczenie? Ogólnie rzecz bior¹c, programiœci czêsto nie rozumiej¹, czym jest dziedziczenie. Po czêœci bierze siê to st¹d, e samo s³owo dziedziczenie ma wiele znaczeñ. Jeœli ktoœ zapisuje ci coœ w testamencie, mówimy, e to dziedziczysz. Mówimy te, e dziedziczysz po³owê genów po matce, a po³owê po ojcu. Oba te znaczenia nie maj¹ nic wspólnego z dziedziczeniem w programowaniu. Tutaj chodzi przede wszystkim o klasyfikacjê, o zwi¹zek miêdzy klasami. Kiedy by³eœ w szkole, zapewne uczy³eœ siê o ssakach i dowiedzia³eœ siê, e pies jest ssakiem. W Visual C# móg³byœ to zobrazowaæ, tworz¹c dwie klasy jedn¹ o nazwie ssak, drug¹ o nazwie pies i deklaruj¹c, e pies dziedziczy po ssaku. Dziedziczenie wskazywa³oby, e miêdzy tymi klasami istnieje zwi¹zek, i podkreœla³o, e wszystkie psy s¹ ssakami. Wa ne Dziedziczenie to relacja miêdzy klasami, a nie obiektami. Deklaruj¹c istnienie zwi¹zku na poziomie klasy, gwarantujemy, e zachodzi on miêdzy wszystkimi obiektami klasy. Dziedziczenie jest ma³o elastyczne.

2 190 Czêœæ II Zrozumieæ jêzyk C# Podstawowa sk³adnia W tym podrozdziale omówimy podstawow¹ sk³adniê zwi¹zan¹ z dziedziczeniem, któr¹ musisz znaæ, eby tworzyæ klasy dziedzicz¹ce po innych klasach. Poznawszy tê sk³adniê bêdziesz móg³ j¹ rozpoznaæ, kiedy zobaczysz j¹ w kodzie lub dokumentacji. Klasy bazowe i pochodne Aby zadeklarowaæ, e klasa dziedziczy po innej klasie, u ywamy nastêpuj¹cej sk³adni: class KlasaPochodna : KlasaBazowa ( Klasa pochodna dziedziczy po klasie bazowej. Oznacza to, e klasa pochodna jest klas¹ bazow¹. Klasa mo e pochodziæ od najwy ej jednej klasy. Innymi s³owy, nigdy nie pochodzi od dwóch lub wielu klas. Wskazówka Programuj¹cy w C++ powinni zauwa yæ, e nie mo na jawnie okreœliæ, czy dziedziczenie jest publiczne, prywatne czy chronione. Dziedziczenie w C# jest zawsze publiczne. Programuj¹cy w Javie powinni zwróciæ uwagê na brak s³owa kluczowego w rodzaju extends. Klasa System.Object to podstawa wszystkich innych klas. Innymi s³owy, wszystkie klasy niejawnie dziedzicz¹ po klasie System.Object. Jeœli zadeklarujesz klasê w taki sposób: class Token public Token(string name) kompilator przepisze j¹ tak (móg³byœ napisaæ to jawnie, ale lepiej tego nie robiæ): class Token : System.Object public Token(string name)

3 Rozdzia³ 12 Dziedziczenie 191 Wywo³ywanie konstruktorów klasy bazowej Konstruktor klasy pochodnej musi wywo³ywaæ konstruktor klasy bazowej. W tym celu u ywa siê s³owa kluczowego base. Nie ma tu adnej niejednoznacznoœci, poniewa klasa mo e mieæ najwy ej jedn¹ klasê bazow¹. Oto przyk³ad: class IdentifierToken : Token public IdentifierToken(string name) : base(name) // wywo³uje Token(name) Jeœli nie wywo³asz jawnie konstruktora klasy bazowej w konstruktorze klasy pochodnej, kompilator spróbuje po cichu wstawiæ wywo³anie domyœlnego konstruktora klasy bazowej. W poprzednim przyk³adzie kompilator przepisa³by poni szy fragment: class Token public Token(string name) w nastêpuj¹cy sposób: class Token : System.Object public Token(string name) : base() To dzia³a, poniewa System.Object ma publiczny konstruktor domyœlny. Jednak e nie wszystkie klasy go maj¹, a wówczas brak wywo³ania konstruktora klasy bazowej spowoduje b³¹d kompilacji: class IdentifierToken : Token public IdentifierToken(string name) // b³¹d; klasa bazowa Token nie ma // publicznego konstruktora domyœlnego

4 192 Czêœæ II Zrozumieæ jêzyk C# Metody new Je eli klasa bazowa i pochodna deklaruj¹ dwie metody o takiej samej sygnaturze (sygnatur¹ metody jest jej nazwa oraz liczba i typ parametrów), to metody te nie s¹ ze sob¹ zwi¹zane. Jeœli spróbujesz skompilowaæ poni szy przyk³ad, kompilator wygeneruje komunikat ostrzegawczy, informuj¹c, e IdentifierToken.Name() ukrywa Token.Name(): class Token public string Name() class IdentifierToken : Token public string Name() Komunikat przypomina, e ze wzglêdu na tak¹ sam¹ sygnaturê i brak zwi¹zku miêdzy dwoma metodami definicja metody Name w klasie IdentifierToken ukrywa metodê Name w klasie Token. Z regu³y tego rodzaju zbie noœæ jest (w najlepszym razie) Ÿród³em nieporozumieñ, wiêc powinieneœ zmieniæ nazwy metod, aby unikn¹æ konfliktu. Jeœli jednak jesteœ pewien, e dwie metody powinny mieæ tê sam¹ sygnaturê, mo esz wyeliminowaæ komunikat ostrzegawczy, u ywaj¹c s³owa kluczowego new: class Token public string Name() class IdentifierToken : Token new public string Name() U ycie s³owa kluczowego new w niczym nie zmienia faktu, e metody nie s¹ ze sob¹ zwi¹zane i e jedna ukrywa drug¹. Wy³¹cza tylko komunikat ostrzegawczy. W rezultacie s³owo kluczowe new informuje: Jestem profesjonalnym programist¹ i wiem, co robiê. Aby zrozumieæ, na czym polega ukrywanie, rozwa poni szy przyk³ad i zastanów siê, która metoda Name zostanie wywo³ana: static void Method(Token t) Console.WriteLine(t.Name()); static void Main() IdentifierToken variable = new IdentifierToken("variable"); Method(variable); W tym przyk³adzie metoda Main deklaruje zmienn¹ typu IdentifierToken i inicjuje j¹ obiektem typu IdentifierToken. Zmienna jest nastêpnie przekazywana jako argument

5 Rozdzia³ 12 Dziedziczenie 193 metodzie Method. Co wa ne, metoda Method deklaruje swój parametr jako Token, a nie IdentifierToken. Jest to dozwolone, poniewa ka dy IdentifierToken to Token i mo na podstawiæ go za Token. Metoda Method wywo³uje nastêpnie metodê Name tego parametru. Jako istoty ludzkie mo emy spojrzeæ na kod i stwierdziæ, e w tym konkretnym przypadku parametr choæ jego typ okreœlono jako Token w rzeczywistoœci odnosi siê do obiektu typu IdentifierToken. Mo na by siê wiêc spodziewaæ, e wywo³anie metody Name oznacza wywo³anie IdentifierToken.Name. Tak jednak nie jest: oznacza wywo³anie Token.Name. Prawdopodobnie nie tego sobie yczysz. Na szczêœcie mo na sprawiæ, e to wywo³anie bêdzie dzia³a³o zgodnie z oczekiwaniami. Metody wirtualne Aby wywo³anie dzia³a³o jak nale y, musisz u yæ polimorfizmu. Polimorfizm dos³ownie oznacza wielokszta³tnoœæ. W programowaniu tym terminem okreœlamy mo liwoœæ zaimplementowania tej samej metody wiêcej ni jeden raz. Dziêki polimorfizmowi mo esz po³¹czyæ dotychczas niezwi¹zane metody Name klasy bazowej i pochodnej oraz zadeklarowaæ, e s¹ dwoma implementacjami tej samej metody. Aby zmieniæ metodê w polimorficzn¹, musisz u yæ s³owa kluczowego virtual. Na przyk³ad: class Token public virtual string Name() S³owo kluczowe virtual oznacza, e jest to pierwsza implementacja metody o nazwie Name. Natomiast brak tego s³owa kluczowego (jak w poprzednim przyk³adzie) oznacza, e jest to jedyna implementacja metody o nazwie Name. Domyœlnie metody C# nie s¹ wirtualne (tak jak w C++, ale inaczej ni w Javie, gdzie metody domyœlnie s¹ wirtualne). Metody przes³aniaj¹ce Jeœli klasa bazowa deklaruje, e metoda jest wirtualna, klasa pochodna mo e u yæ s³owa kluczowego override, aby zadeklarowaæ inn¹ implementacjê tej metody. Na przyk³ad: class IdentifierToken : Token public override string Name() Deklaruj¹c metody polimorficzne za pomoc¹ s³ów kluczowych virtual i override, musisz przestrzegaæ kilku wa nych regu³: Nie mo esz zadeklarowaæ metody prywatnej ze s³owem kluczowym virtual lub override. Jeœli to zrobisz, spowodujesz b³¹d kompilacji. Prywatne naprawdê znaczy prywatne. Obie metody musz¹ byæ identyczne, tzn. mieæ tê sam¹ nazwê, te same typy parametrów i ten sam typ zwrotny (C# nie obs³uguje kowariancji typów zwrotnych).

6 194 Czêœæ II Zrozumieæ jêzyk C# Dwie metody musz¹ mieæ tê sam¹ dostêpnoœæ. Jeœli jedna metoda jest publiczna, druga tak e musi byæ publiczna. (Programiœci C++ powinni zwróciæ na to uwagê. W C++ metody mog¹ mieæ ró n¹ dostêpnoœæ). Mo esz przes³oniæ tylko metodê wirtualn¹. Jeœli metoda klasy bazowej nie jest wirtualna i spróbujesz j¹ przes³oniæ, spowodujesz b³¹d kompilacji. Tak byæ powinno; to klasa bazowa powinna decydowaæ, czy jej metody mog¹ byæ przes³aniane. Jeœli klasa pochodna nie deklaruje metody z wykorzystaniem s³owa kluczowego override, to nie przes³ania metody klasy bazowej. Innymi s³owy, staje siê implementacj¹ zupe³nie innej metody, która przypadkiem ma tê sam¹ nazwê. Tak jak poprzednio, spowoduje to ostrze enie podczas kompilacji, które mo esz wy³¹czyæ opisanym ju s³owem kluczowym new. Metoda przes³aniaj¹ca jest niejawnie wirtualna i sama mo e zostaæ przes³oniêta w kolejnej klasie pochodnej. Nie mo esz tego jednak jawnie deklarowaæ za pomoc¹ s³owa kluczowego virtual. Chodzi o to, e metoda nie ma adnych kwalifikatorów, jeœli jest zwyk³¹, niepolimorficzn¹ i nieprzes³aniaj¹c¹ metod¹; w przeciwnym razie ma tylko jeden kwalifikator (ta regu³a obowi¹zuje niemal zawsze). Po zadeklarowaniu metody w klasie bazowej jako wirtualnej, a metody w klasie pochodnej jako przes³aniaj¹cej, mo emy ponownie zaj¹æ siê poprzednim przyk³adem: static void Method(Token t) Console.WriteLine(t.Name()); static void Main() IdentifierToken variable = new IdentifierToken("variable"); Method(variable); Tym razem, kiedy kompilator kompiluje wywo³anie metody Name na parametrze t (zadeklarowanym jako Token), zauwa a, e metoda Token.Name jest wirtualna. Z tego wzglêdu nie wywo³uje bezpoœrednio Token.Name (co robi³ poprzednio), ale najbardziej pochodn¹ implementacjê metody Token.Name w rzeczywistym obiekcie, do którego odnosi siê t. W tym przypadku t odnosi siê do obiektu klasy IdentifierToken, która przes³ania metodê Token.Name; zapis t.name spowoduje wiêc, zgodnie z oczekiwaniami, wywo³anie metody IdentifierToken.Name. Dostêp chroniony S³owa kluczowe public i private definiuj¹ skrajne rodzaje dostêpnoœci: sk³adowe publiczne klasy s¹ dostêpne dla ka dego, a sk³adowe prywatne dla nikogo (oczywiœcie, z wyj¹tkiem samej klasy). Te dwie skrajnoœci wystarczaj¹, kiedy klasy pozostaj¹ w izolacji. Jak jednak wiedz¹ wszyscy doœwiadczeni programiœci jêzyków obiektowych, izolowane klasy nie mog¹ rozwi¹zywaæ skomplikowanych problemów. Sekret kryje siê w umiejêtnoœci ³¹czenia klas ze sob¹, w p³ynnym przejœciu od programowania na ma³¹ skalê do programowania na du ¹ skalê. Dziedziczenie jest potê nym mechanizmem ³¹czenia klas, a miêdzy klas¹ pochodn¹ i jej klas¹ bazow¹ (ale nie

7 Rozdzia³ 12 Dziedziczenie 195 odwrotnie) zachodzi szczególny, œcis³y zwi¹zek. Odzwierciedla go s³owo kluczowe protected (chroniony): Klasa pochodna ma dostêp do chronionych sk³adowych klasy bazowej. Innymi s³owy, wewn¹trz klasy pochodnej chronione sk³adowe klasy bazowej s¹ publiczne. Jeœli klasa nie jest klas¹ pochodn¹, nie ma dostêpu do chronionych sk³adowych klasy. Innymi s³owy, wewn¹trz klasy nie bêd¹cej klas¹ pochodn¹ chronione sk³adowe innej klasy s¹ prywatne. C# daje programistom pe³n¹ swobodê deklarowania metod i pól jako chronionych. Jednak e wiêkszoœæ podrêczników programowania obiektowego zaleca, eby pola by³y œciœle prywatne. Pola publiczne naruszaj¹ hermetycznoœæ, poniewa daj¹ wszystkim u ytkownikom klasy bezpoœredni, niekontrolowany dostêp do pól. Pola chronione s¹ hermetyczne dla u ytkowników klasy, poniewa s¹ dla nich niedostêpne. Pozwalaj¹ jednak na naruszenie hermetycznoœci przez klasy pochodne. Wskazówka Dostêp do chronionej sk³adowej klasy bazowej mo esz uzyskaæ nie tylko w klasie pochodnej, ale tak e w klasie wywiedzionej z klasy pochodnej. Chroniona sk³adowa klasy bazowej pozostaje chroniona w klasie pochodnej i w klasach wywiedzionych z klasy pochodnej. Tworzenie interfejsów Dziedziczenie po klasie jest przydatne, ale znacznie wa niejsze jest dziedziczenie po interfejsach. Interfejsy to rzeczywisty powód, dla którego dziedziczenie istnieje. Interfejsy s¹ bardzo wa ne; pozwalaj¹ ca³kowicie oddzieliæ nazwê metody od jej implementacji. Do tej pory nie mogliœmy tego zrobiæ (metoda wirtualna musi mieæ treœæ). Takie oddzielenie daje ogromne mo liwoœci. Interfejsy œciœle oddzielaj¹ co od jak. Interfejs okreœla tylko nazwê metody, nie troszcz¹c siê o sposób jej realizacji. Interfejs informuje, jak obiekt powinien byæ u ywany, a nie jak jest zaimplementowany w danej chwili. Bardzo podobnie funkcjonuj¹ ludzie; codziennie u ywamy wielu urz¹dzeñ, nie zastanawiaj¹c siê, jak dzia³aj¹. Na przyk³ad sposób dzia³ania telefonów jest dla ciebie nieistotny, poniewa nie wytwarzasz ich, tylko u ywasz. Wystarczy, e wiesz, do czego s³u y telefon i jak sprawiæ, e bêdzie on pe³ni³ swoj¹ funkcjê. Wystarczy, e znasz interfejs. Sk³adnia Aby zadeklarowaæ interfejs, u ywasz s³owa kluczowego interface zamiast class lub struct. W interfejsie deklarujesz metody tak samo jak w klasie lub strukturze, ale nigdy nie u ywasz modyfikatora dostêpnoœci (public, private, protected), a treœæ metody zastêpujesz œrednikiem. Na przyk³ad: interface IToken string Name();

8 196 Czêœæ II Zrozumieæ jêzyk C# Wskazówka Dokumentacja Microsoft.NET Framework zaleca, aby nazwy interfejsów poprzedzaæ du ¹ liter¹ I. To ostatni bastion notacji wêgierskiej w C#. Ograniczenia Nale y zapamiêtaæ, e interfejs nigdy nie zawiera implementacji. Nic. Nul. Zero. Ograniczenia s¹ naturaln¹ konsekwencj¹ tego faktu: Nie mo esz tworzyæ instancji interfejsu. Gdyby to by³o mo liwe, co oznacza³oby wywo³anie jednej z jego metod, które z definicji s¹ tylko nazwane, a nie zaimplementowane? W interfejsie nie mo e byæ adnych pól. Pole jest implementacj¹ atrybutu obiektu. Pola s¹ niedopuszczalne, nawet pola statyczne. W interfejsie nie mo e byæ konstruktorów. Konstruktor zawiera instrukcje s³u ¹ce do inicjowania nowo utworzonej instancji obiektu, a nie wolno tworzyæ instancji interfejsu. W interfejsie nie mo e byæ destruktora. Destruktor zawiera instrukcje s³u ¹ce do niszczenia instancji obiektu, ale eby zniszczyæ obiekt, musisz najpierw go utworzyæ, czego nie mo esz zrobiæ bo to interfejs. Nie mo esz u ywaæ modyfikatora dostêpnoœci. Wszystkie metody interfejsu s¹ z za³o enia publiczne. Interfejs reprezentuje sposób u ycia. Nie mo esz zagnie d aæ adnych typów (wyliczeñ, struktur, klas, interfejsów lub delegacji) w interfejsie. Interfejs nie mo e pochodziæ od struktury lub klasy. Struktury i klasy zawieraj¹ implementacjê; gdyby interfejs móg³ po nich dziedziczyæ, dziedziczy³by implementacjê. Implementowanie interfejsu Aby zaimplementowaæ interfejs, deklarujesz klasê (lub strukturê), która dziedziczy po interfejsie i implementuje wszystkie jego metody. Na przyk³ad: class Token : IToken public string Name() Kiedy implementujesz interfejs, musisz upewniæ siê, e ka da metoda dok³adnie odpowiada swojemu prototypowi w interfejsie: Metoda musi byæ jawnie zadeklarowana jako publiczna, poniewa metoda interfejsu jest niejawnie publiczna. Typy zwrotne musz¹ do siebie dok³adnie pasowaæ. Nazwy metod musz¹ do siebie dok³adnie pasowaæ.

9 Rozdzia³ 12 Dziedziczenie 197 Parametry (jeœli s¹) musz¹ do siebie dok³adnie pasowaæ (³¹cznie z modyfikatorami ref i out, choæ nie params). Jeœli jest jakaœ ró nica, kompilacja nie powiedzie siê, poniewa metoda interfejsu nie bêdzie zaimplementowana. Domyœlnie metoda implementuj¹ca metodê interfejsu nie jest wirtualna (by³a ju o tym mowa). Jeœli chcesz przes³oniæ implementacjê metody w kolejnej klasie pochodnej, musisz zadeklarowaæ metodê jako wirtualn¹ (o tym równie wspomnieliœmy). Na przyk³ad: class Token : IToken public virtual string Name() class IdentifierToken : Token public override string Name() Zgadza siê to z zasad¹, e s³owo kluczowe virtual deklaruje pierwsz¹ implementacjê metody (w kolejnych klasach pochodnych mog¹ byæ inne), a metoda niewirtualna jest jedyn¹ implementacj¹. Klasa mo e rozszerzaæ inn¹ klasê oraz implementowaæ interfejs. W takim przypadku C# nie odró nia klasy bazowej od interfejsu bazowego za pomoc¹ s³ów kluczowych, jak robi to np. Java. C# u ywa notacji pozycyjnej. Najpierw pisze siê nazwê klasy bazowej, potem przecinek, wreszcie nazwê interfejsu bazowego. Na przyk³ad: interface IToken class DefaultTokenImpl class IdentifierToken : DefaultTokenImpl, IToken Klasy abstrakcyjne Niemal zawsze okazuje siê, e dany interfejs jest implementowany przez wiele klas lub struktur. Na przyk³ad interfejs IToken móg³by byæ implementowany przez piêæ klas, po jednej na ka dy typ leksemu w pliku Ÿród³owym C#: IdentifierToken, Keyword- Token, LiteralToken, OperatorToken i PunctuatorToken (móg³byœ równie zdefiniowaæ klasy komentarza i odstêpu). W takiej sytuacji czêœci klas pochodnych maj¹ zwykle

10 198 Czêœæ II Zrozumieæ jêzyk C# wspóln¹ implementacjê. Na przyk³ad w poni szych dwóch klasach powielenie kodu jest oczywiste: class IdentifierToken : IToken public IdentifierToken(string name) this.name = name; public virtual string Name() return name; private string name; class StringLiteralToken : IToken public StringLiteralToken(string name) this.name = name; public virtual string Name() return name; private string name; Powielenie kodu to znak ostrzegawczy; powinieneœ przepisaæ kod tak, aby unikn¹æ duplikacji. Mo na to jednak zrobiæ dobrze albo Ÿle. Z³y sposób polega na upchniêciu cech wspólnych w interfejsie. Jest to niepo ¹dane, bo wówczas musia³byœ zmieniæ interfejs w klasê (poniewa interfejsy nie mog¹ zawieraæ implementacji). Interfejsy wymyœlono nie bez powodu; zostaw interfejs w spokoju. Aby unikn¹æ duplikacji, nale y utworzyæ now¹ klasê, która bêdzie zawieraæ wspóln¹ implementacjê. Na przyk³ad: class DefaultTokenImpl : IToken public DefaultTokenImpl(string name) this.name = name; public string Name() return name; private string name; class IdentifierToken : DefaultTokenImpl, IToken public IdentifierToken(string name) : base(name)

11 Rozdzia³ 12 Dziedziczenie 199 class StringLiteralToken : DefaultTokenImpl, IToken public StringLiteralToken(string name) : base(name) Jest to rozwi¹zanie dobre, ale jeszcze nie doskona³e: mo esz teraz tworzyæ instancje klasy DefaultTokenImpl, co raczej nie ma sensu. Klasa DefaultTokenImpl ma tylko zapewniaæ wspóln¹ implementacjê; istnieje tylko po to, aby po niej dziedziczyæ (albo nie ka da klasa pochodna sama o tym decyduje). Klasa DefaultTokenImpl jest abstrakcyjna, w takim samym sensie jak interfejs. Tworzenie instancji interfejsu jest zawsze niemo liwe, ale chc¹c zadeklarowaæ, e nie wolno tworzyæ instancji klasy, musisz o tym jawnie poinformowaæ za pomoc¹ s³owa kluczowego abstract. Na przyk³ad: abstract class DefaultTokenImpl public DefaultTokenImpl(string name) this.name = name; public string Name() return name; private string name; Zwróæ uwagê, e nowa klasa DefaultTokenImpl nie implementuje interfejsu IToken. Mog³aby, ale s³u y nie do tego. Klasa abstrakcyjna okreœla wspóln¹ implementacjê, natomiast interfejs okreœla sposób u ycia. Zwykle lepiej oddzieliæ te dwa aspekty i pozwoliæ klasom nieabstrakcyjnym (takim jak StringLiteralToken) samodzielnie decydowaæ o sposobie implementowania interfejsów: Mog¹ dziedziczyæ po DefaultTokenImpl oraz IToken; w takim przypadku DefaultTokenImpl.Name staje siê implementacj¹ metody IToken.Name. Oznacza to, e metoda DefaultTokenImpl.Name musi byæ publiczna. Mo esz zadeklarowaæ konstruktor DefaultTokenImpl jako chroniony, ale metoda Name musi pozostaæ publiczna, jeœli ma byæ implementacj¹ IToken.Name w klasie pochodnej. Mog¹ nie dziedziczyæ po DefaultTokenImpl; w takim przypadku bêd¹ musia³y same implementowaæ metodê IToken.Name. Rezygnacja z dziedziczenia mo e mieæ ró ne przyczyny (choæby prosty fakt, e klasa mo e mieæ co najwy ej jedn¹ klasê bazow¹). Metody abstrakcyjne Tylko klasy abstrakcyjne mog¹ deklarowaæ metody abstrakcyjne. Oznacza to, e w klasie abstrakcyjnej wolno oznaczyæ metodê s³owem kluczowym abstract i zamiast treœci metody napisaæ œrednik (jak w interfejsie). Metody abstrakcyjne s¹ szczególnie przydatne wtedy, gdy klasa abstrakcyjna implementuje interfejs, poniewa klasa abstrakcyjna tak jak zwyk³e klasy musi implementowaæ wszystkie metody interfej-

12 200 Czêœæ II Zrozumieæ jêzyk C# su, po którym dziedziczy. Na przyk³ad poni sza klasa DefaultTokenImpl kompiluje siê tylko dlatego, e implementuje obie metody dziedziczone po swoim interfejsie: interface IToken int Line(); string Name(); abstract class DefaultTokenImpl : IToken public abstract int Line(); public string Name() return name; public DefaultTokenImpl(string name) this.name = name; private string name; Metoda abstrakcyjna jest niejawnie wirtualna, wiêc w klasach pochodnych musi byæ implementowana przez metody przes³aniaj¹ce. Na przyk³ad: class LiteralToken : DefaultTokenImpl public override int Line() Klasy zamkniête U ywanie dziedziczenia nie jest ³atwe. Nie ma siê czemu dziwiæ; jeœli tworzysz interfejs albo klasê abstrakcyjn¹, œwiadomie piszesz coœ, z czego w przysz³oœci bêdziesz wywodzi³ nowe klasy. Problem w tym, e trudno przewidzieæ przysz³oœæ. eby utworzyæ elastyczn¹ i ³atw¹ w u yciu hierarchiê interfejsów, klas abstrakcyjnych oraz zwyk³ych klas, potrzeba umiejêtnoœci, wysi³ku i znajomoœci problemu, który próbujesz rozwi¹zaæ. Innymi s³owy, jeœli nie tworzysz klasy z zamiarem u ycia jej jako klasy bazowej, jest ma³o prawdopodobne, e bêdzie dobrze pe³ni³a tak¹ funkcjê. Na szczêœcie C# pozwala u yæ s³owa kluczowego sealed, aby zapobiec u ywaniu klasy jako klasy bazowej. Na przyk³ad: sealed class LiteralToken : DefaultTokenImpl, IToken Jeœli inna klasa zadeklaruje LiteralToken jako klasê bazow¹, wyst¹pi b³¹d kompilacji. Klasa zamkniêta nie mo e deklarowaæ metod wirtualnych. S³owo kluczowe virtual deklaruje, e jest to pierwsza implementacja metody, która bêdzie przes³aniana w klasach pochodnych, a z klasy zamkniêtej nie mo na wywodziæ nowych klas. Zauwa te, e struktura jest niejawnie zamkniêta; nie da siê wywodziæ z niej nowych struktur.

13 Rozdzia³ 12 Dziedziczenie 201 Metody zamkniête Za pomoc¹ s³owa kluczowego sealed mo na równie zadeklarowaæ metodê jako zamkniêt¹. Oznacza to, e klasa pochodna nie mo e przes³aniaæ metody. Zamkn¹æ mo na tylko metodê przes³aniaj¹c¹; zwi¹zek miêdzy interfejsem oraz s³owami kluczowymi virtual, override i sealed jest nastêpuj¹cy: Interfejs wprowadza nazwê metody. Metoda wirtualna (virtual) topierwsza implementacja metody. Metoda przes³aniaj¹ca (override) tokolejna implementacja metody. Metoda zamkniêta (sealed) toostatnia implementacja metody. Rozszerzanie hierarchii dziedziczenia W poni szym æwiczeniu zapoznasz siê z niewielk¹ hierarchi¹ interfejsów i klas, które wspólnie tworz¹ prosty szkielet. Wskazówka Szkielet ró ni siê od biblioteki tym, e biblioteki mo na u ywaæ tylko bezpoœrednio, w œciœle okreœlony sposób, natomiast ze szkieletu mo na korzystaæ poœrednio, na wiele ró nych sposobów, tworz¹c klasy dziedzicz¹ce po rozwa nie zaprojektowanych interfejsach szkieletu. Szkielet jest aplikacj¹ Microsoft Windows, która symuluje czytanie pliku Ÿród³owego C# i klasyfikowanie jego treœci na leksemy (np. identyfikatory, s³owa kluczowe, operatory itd.). W drugim æwiczeniu utworzysz klasê, która dziedziczy po interfejsach szkieletu oraz wyœwietla leksemy pliku Ÿród³owego w polu wzbogaconego tekstu, u ywaj¹c kolorowej sk³adni. Hierarchia dziedziczenia 1. Uruchom Microsoft Visual Studio.NET. 2. Otwórz projekt CSharp w folderze \Visual C# Step by Step\Chapter 12\CSharp. Otworzy siê projekt CSharp. 3. Otwórz plik Ÿród³owy SourceFile.cs w okienku Code. Klasa SourceFile zawiera prywatne pole tablicowe o nazwie tokens: private IVisitableToken[] tokens = new KeywordToken("using"), new WhitespaceToken(" "), new IdentifierToken("System"), new PunctuatorToken(";"), ; Ta tablica zawiera sekwencjê obiektów, które implementuj¹ interfejs IVisitableToken. Symuluj¹ one leksemy prostego pliku Ÿród³owego z programem hello world. Pe³na wersja tego projektu analizowa³aby plik Ÿród³owy o podanej na-

14 202 Czêœæ II Zrozumieæ jêzyk C# zwie i tworzy³a leksemy dynamicznie. Klasa SourceFile zawiera te publiczn¹ metodê o nazwie Accept, która przyjmuje jeden parametr typu ITokenVisitor. Treœæ metody Accept iteruje przez leksemy, wywo³uj¹c ich metody Accept: public void Accept(ITokenVisitor visitor) foreach(ivisitabletoken token in tokens) token.accept(visitor); Dziêki temu parametr visitor odwiedza kolejno ka dy leksem. 4. Otwórz plik Ÿród³owy IVisitableToken.cs w okienku Code. Interfejs IVistableToken dziedziczy po dwóch innych interfejsach, IVisitable oraz IToken: interface IVisitableToken: IVistable, IToken 5. Otwórz plik Ÿród³owy IVisitable.cs w okienku Code. Interfejs IVisitable deklaruje metodê Accept: interface IVistable void Accept(ITokenVisitor visitor) Ka dy obiekt w tablicy tokens w klasie SourceFile jest dostêpny za poœrednictwem interfejsu IVisitableToken. Interfejs IVisitableToken dziedziczy metodê Accept. Oznacza to, e ka dy leksem musi implementowaæ metodê Accept. 6. Otwórz plik Ÿród³owy Source.cs w okienku Code i znajdÿ klasê IdentifierToken. Klasa IdentifierToken dziedziczy po abstrakcyjnej klasie DefaultTokenImpl oraz po interfejsie IVisitableToken. Implementuje metodê Accept w nastêpuj¹cy sposób: void IVisitable.Accept(ITokenVisitor visitor) visitor.visitidentifier(tostring()); Inne klasy leksemów wygl¹daj¹ podobnie. 7. Otwórz plik Ÿród³owy ITokenVisitor.cs w okienku Code. Interfejs ITokenVisitor zawiera po jednej metodzie na ka dy typ leksemu. Ca³a ta hierarchia interfejsów, klas abstrakcyjnych i zwyk³ych klas dzia³a tak, e mo esz napisaæ klasê, która implementuje interfejs ITokenVisitor, utworzyæ instancjê tej klasy i przekazaæ j¹ jako parametr metody Accept klasy SourceFile. Na przyk³ad: class MyVisitor : ITokenVisitor public void VisitIdentifier(string token)

15 Rozdzia³ 12 Dziedziczenie 203 public void VisitKeyword(string token) static void Main() SourceFile source = new SourceFile(); MyVisitor visitor = new MyVisitor(); source.accept(visitor); W rezultacie ka dy leksem pliku Ÿród³owego wywo³a odpowiedni¹ metodê obiektu visitor. Mo esz utworzyæ ró ne klasy wizytatorów, które bêd¹ wykonywaæ ró ne zadania podczas odwiedzania poszczególnych leksemów. Na przyk³ad: Wizytator wyœwietlaj¹cy, który wyœwietla plik Ÿród³owy w polu wzbogaconego tekstu. Wizytator drukuj¹cy, który przekszta³ca znaki tabulacji w spacje i wyrównuje nawiasy klamrowe. Wizytator pisowni, który sprawdza pisowniê ka dego identyfikatora. Wizytator doradczy, który sprawdza, czy identyfikatory publiczne zaczynaj¹ siê du ¹ liter¹ i czy interfejsy zaczynaj¹ siê du ¹ liter¹ I. Wizytator z³o onoœci, który monitoruje g³êbokoœæ zagnie d enia nawiasów klamrowych w kodzie. Wizytator zliczaj¹cy, który sumuje liczbê wierszy w ka dej metodzie, liczbê sk³adowych ka dej klasy oraz liczbê wierszy w ka dym pliku Ÿród³owym. W poni szym æwiczeniu utworzymy klasê ColorSyntaxVisitor, która wyœwietla plik Ÿród³owy w polu wzbogaconego tekstu, u ywaj¹c kolorowej sk³adni (np. s³owa kluczowe s¹ wyœwietlane na niebiesko). Pisanie klasy ColorSyntaxVisitor 1. W Solution Explorerze kliknij dwukrotnie pozycjê Form1.cs, aby wyœwietliæ formê Color Syntax w oknie Designer View. Forma zawiera przycisk Open, który otwiera plik przeznaczony do podzia³u na leksemy, oraz pole wzbogaconego tekstu, które wyœwietla leksemy.

16 204 Czêœæ II Zrozumieæ jêzyk C# 2. Otwórz plik Ÿród³owy Form1.cs w okienku Code i znajdÿ dwa prywatne pola o nazwach codetext oraz Open: private System.Windows.Forms.RichTextBox codetext; private System.Windows.Forms.Button Open; W³aœnie te dwa pola implementuj¹ pole wzbogaconego tekstu oraz przycisk, które przed chwil¹ widzia³eœ na formie. 3. W okienku Code znajdÿ metodê Form1.Open_Click. Ta metoda jest wywo³ywana po klikniêciu przycisku Open. Musisz j¹ napisaæ tak, eby wyœwietla³a leksemy w polu wzbogaconego tekstu. Zmieñ metodê Form1. Open_Click w nastêpuj¹cy sposób: private void Open_Click(object sender, System.EventArgs e) SourceFile source = new SourceFile(); ColorSyntaxVisitor visitor = new ColorSyntaxVisitor(codeText); source.accept(visitor); 4. Otwórz plik Ÿród³owy ColorSyntaxVisitor.cs w okienku Code. Klasa ColorSyntaxVisitor jest czêœciowo zaimplementowana. Dziedziczy po interfejsie ITokenVisitor i zawiera ju dwa pola oraz konstruktor, który inicjuje referencjê do docelowego pola wzbogaconego tekstu. Twoim zadaniem bêdzie zaimplementowaæ metody dziedziczone po interfejsie ITokenVisitor oraz wyœwietliæ leksemy w docelowym polu wzbogaconego tekstu. 5. W okienku Code dopisz metodê Write do klasy ColorSyntaxVisitor: private void Write(string token, Color color) target.appendtext(token); target.select(index, index + token.length); index += token.length; target.selectioncolor = color; Ta metoda do³¹cza leksem do pola wzbogaconego tekstu, wyœwietlaj¹c go w okreœlonym kolorze. Bêd¹ j¹ wywo³ywaæ pozosta³e metody.

17 Rozdzia³ 12 Dziedziczenie W okienku Code napisz pozosta³e metody klasy ColorSyntaxVisitor. U yj koloru Color.Blue dla s³ów kluczowych, ColorGreen dla litera³ów ³añcuchowych, a Color.Black dla pozosta³ych leksemów. void ITokenVisitor.VisitComment(string token) Write(token, Color.Black); void ITokenVisitor.VisitIdentifier(string token) Write(token, Color.Black); void ITokenVisitor.VisitKeyword(string token) Write(token, Color.Blue); void ITokenVisitor.VisitOperator(string token) Write(token, Color.Black); void ITokenVisitor.VisitPunctuator(string token) Write(token, Color.Black); void ITokenVisitor.VisitStringLiteral(string token) Write(token, Color.Green); void ITokenVisitor.VisitWhiteSpace(string token) Write(token, Color.Black); 7. Z menu Build wybierz polecenie Build Solution. W razie potrzeby popraw b³êdy i ponownie zbuduj program. 8. Z menu Debug wybierz polecenie Start Without Debugging. Pojawi siê forma Color Syntax. 9. Kliknij przycisk Open na formie. W polu wzbogaconego tekstu uka e siê kod ze s³owami kluczowymi wyœwietlonymi na niebiesko, a litera³ami ³añcuchowymi na zielono.

18 206 Czêœæ II Zrozumieæ jêzyk C# 10. Zamknij formê. Wrócisz do Visual Studia.NET. Praca z wieloma interfejsami Klasa mo e mieæ najwy ej jedn¹ klasê bazow¹, ale dowolnie du o interfejsów. Klasa musi implementowaæ wszystkie metody odziedziczone po wszystkich interfejsach. Klasy abstrakcyjne i zamkniête musz¹ przestrzegaæ tych samych regu³ dziedziczenia co zwyk³e klasy. Interfejs nie mo e dziedziczyæ po adnej klasie (to wprowadzi³oby do niego implementacjê), ale mo e dziedziczyæ po dowolnie wielu interfejsach (bo nie wprowadza to adnej implementacji). Sk³adnia Jeœli interfejs, struktura lub klasa dziedziczy po wiêcej ni jednym interfejsie, interfejsy umieszcza siê na podzielonej przecinkami liœcie. Jeœli klasa ma równie klasê bazow¹, interfejsy nale y wymieniæ po klasie bazowej. Na przyk³ad: class IdentifierToken : DefaultTokenImpl, IToken, IVisitable Jawna implementacja interfejsu Istnieje drugi sposób implementowania metody interfejsu przez klasê lub strukturê. W tym przypadku nazwê metody jawnie kwalifikuje siê nazw¹ interfejsu i nie u ywa modyfikatora dostêpnoœci. Jeœli np. interfejs IVisitable wygl¹da tak: interface IVisitable void Accept(IVisitor visitor); mo na zaimplementowaæ go w taki sposób: class IdentifierToken : DefaultTokenImpl, IToken, IVisitable void IVisitable.Accept(IVisitor visitor)

19 Rozdzia³ 12 Dziedziczenie 207 Nazywamy to jawn¹ implementacj¹ interfejsu (ang. Explicit Interface Implementation, EII). Metoda EII jest w rezultacie prywatna w implementuj¹cej j¹ strukturze lub klasie. Na przyk³ad: IdentifierToken token = new IdentifierToken("token"); token.accept(visitor); // b³¹d kompilacji: metoda niedostêpna Mo na jednak wywo³aæ metodê przez jawnie nazwany interfejs, u ywaj¹c rzutowania. Na przyk³ad: IdentifierToken token = new IdentifierToken("token"); ((IVisitable)token).Accept(visitor); // w porz¹dku Zatem metoda EII nie jest ani ca³kowicie prywatna, ani ca³kowicie publiczna, co wyjaœnia brak kwalifikatora dostêpnoœci. Metody EII s¹ przydatne z co najmniej dwóch powodów. Po pierwsze, tworz¹ jeszcze œciœlejszy podzia³ miêdzy interfejsem, który okreœla, jak nale y u ywaæ obiektu (typem u ycia), a klas¹, która okreœla, jak obiekt jest tworzony i implementowany (klas¹ kreacji). Metody EII s¹ prywatnymi metodami klasy, wiêc eby je wywo³aæ, trzeba spojrzeæ na obiekt przez jego interfejs. Po drugie, metody EII rozwi¹zuj¹ potencjalny problem konfliktu nazw miêdzy wieloma interfejsami. Przypuœæmy, e interfejsy IToken oraz IVisitable zawieraj¹ metodê o nazwie ToString: interface IToken string ToString(); interface IVisitable string ToString(); Czy ci siê to podoba, czy nie, poni sza klasa deklaruje jedn¹ metodê ToString, która jest implementacj¹ obu powy szych metod: class IdentifierToken: IToken, IVisitable public string ToString() EII pozwala utworzyæ dwie ró ne implementacje metody ToString, po jednej na ka d¹ metodê interfejsu. Na przyk³ad: class IdentifierToken: IToken, IVisitable string IToken.ToString()

20 208 Czêœæ II Zrozumieæ jêzyk C# string IVisitable.ToString() Zwróæ uwagê, e metoda EII nie jest wirtualna (i nie mo e byæ). Nie da siê jej równie przes³oniæ w klasie pochodnej. Podsumowanie kombinacji s³ów kluczowych W poni szej tabeli wymieniono poprawne (tak) i niepoprawne (nie) kombinacje s³ów kluczowych. interface abstract class class sealed class struct abstract nie tak nie nie nie new tak(1) tak tak tak nie(2) override nie tak tak tak nie(3) private nie tak tak tak tak protected nie tak tak tak nie(4) public nie tak tak tak tak sealed nie tak tak tak nie virtual nie tak tak nie nie (1) Interfejs mo e rozszerzaæ inny interfejs i wprowadzaæ now¹ metodê o takiej samej sygnaturze. (2) Struktura niejawnie dziedziczy po klasie System.Object zawieraj¹cej metody, które struktura mo e ukryæ. (3) Struktura niejawnie dziedziczy po klasie System.Object zawieraj¹cej metody wirtualne. (4) Struktura jest niejawnie zamkniêta i nie mo na po niej dziedziczyæ. Jeœli chcesz przejœæ do nastêpnego rozdzia³u Nie wy³¹czaj Visual Studia.NET i zacznij czytaæ rozdzia³ 13. Jeœli chcesz opuœciæ Visual Studio.NET Z menu File wybierz polecenie Exit. Jeœli zobaczysz okno dialogowe Save (Zapisz), kliknij przycisk Yes (Tak).

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Programowanie II prowadzący: Adam Dudek Lista nr 8 Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to najważniejsza cecha świadcząca o sile programowania

Bardziej szczegółowo

Kompozycja i dziedziczenie klas

Kompozycja i dziedziczenie klas Programowanie obiektowe Kompozycja i dziedziczenie klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Kompozycja i dziedziczenie klas

Bardziej szczegółowo

0.1 Hierarchia klas. 0.1.1 Diagram. 0.1.2 Krótkie wyjaśnienie

0.1 Hierarchia klas. 0.1.1 Diagram. 0.1.2 Krótkie wyjaśnienie 0.1 Hierarchia klas 0.1.1 Diagram 0.1.2 Krótkie wyjaśnienie Po pierwsze to jest tylko przykładowe rozwiązanie. Zarówno na wtorkowych i czwartkowych ćwiczeniach odbiegaliśmy od niego, ale nie wiele. Na

Bardziej szczegółowo

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

.NET Klasy, obiekty. ciąg dalszy

.NET Klasy, obiekty. ciąg dalszy .NET Klasy, obiekty ciąg dalszy Przeciążanie operatorów 1 W języku C# istnieje możliwość zdefiniowania funkcjonalności dużej części operatorów dla typów stworzonych przez użytkownika. Dzięki takiemu zabiegowi,

Bardziej szczegółowo

Po³¹czenie iphone'a/ipad a do Smart Multishare USB

Po³¹czenie iphone'a/ipad a do Smart Multishare USB INSTRUKCJA OBSLUGI Po³¹czenie iphone'a/ipad a do Smart Multishare USB Smart Multishare USB jest produktem, który pozwala Ci bezprzewodowo transmitowaæ elementy takie jak zdjêcia, filmy video, muzykê i

Bardziej szczegółowo

Wykład 5 Okna MDI i SDI, dziedziczenie

Wykład 5 Okna MDI i SDI, dziedziczenie Wykład 5 Okna MDI i SDI, dziedziczenie Autor: Zofia Kruczkiewicz Zagadnienia 1. Aplikacja wielookienkowa. Zakładanie projektu typu CLR Windows Forms 1.1. Aplikacja typu MDI 1.2. Aplikacja typu SDI 2. Dziedziczenie

Bardziej szczegółowo

Klasy abstrakcyjne i interfejsy

Klasy abstrakcyjne i interfejsy Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie

Bardziej szczegółowo

IV. UK ADY RÓWNAÑ LINIOWYCH

IV. UK ADY RÓWNAÑ LINIOWYCH IV. UK ADY RÓWNAÑ LINIOWYCH 4.1. Wprowadzenie Uk³ad równañ liniowych gdzie A oznacza dan¹ macierz o wymiarze n n, a b dany n-elementowy wektor, mo e byæ rozwi¹zany w skoñczonej liczbie kroków za pomoc¹

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Dziedziczenie jednobazowe, poliformizm

Dziedziczenie jednobazowe, poliformizm Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie jednobazowe 2. Polimorfizm część pierwsza 3. Polimorfizm część druga Zofia Kruczkiewicz, ETE8305_6 1 Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie

Bardziej szczegółowo

Technologie i usługi internetowe cz. 2

Technologie i usługi internetowe cz. 2 Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,

Bardziej szczegółowo

PRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc

PRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc PRAWA ZACHOWANIA Podstawowe terminy Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc a) si wewn trznych - si dzia aj cych na dane cia o ze strony innych

Bardziej szczegółowo

Instalacja. Zawartość. Wyszukiwarka. Instalacja... 1. Konfiguracja... 2. Uruchomienie i praca z raportem... 4. Metody wyszukiwania...

Instalacja. Zawartość. Wyszukiwarka. Instalacja... 1. Konfiguracja... 2. Uruchomienie i praca z raportem... 4. Metody wyszukiwania... Zawartość Instalacja... 1 Konfiguracja... 2 Uruchomienie i praca z raportem... 4 Metody wyszukiwania... 6 Prezentacja wyników... 7 Wycenianie... 9 Wstęp Narzędzie ściśle współpracujące z raportem: Moduł

Bardziej szczegółowo

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI) Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI) Jacek Cichosz www.zssk.pwr.wroc.pl Katedra Systemów i Sieci Komputerowych Politechnika Wrocławska Dziedziczenie 221 Dziedziczenie Dziedziczenie

Bardziej szczegółowo

TÜV Rheinland Polska. Nowy Znak. Odpowiadamy na Pañstwa pytania. www.tuv.pl

TÜV Rheinland Polska. Nowy Znak. Odpowiadamy na Pañstwa pytania. www.tuv.pl TÜV Rheinland Polska Nowy Znak Odpowiadamy na Pañstwa pytania Odpowiadamy na Pañstwa pytania wszystko czego chc¹ siê Pañstwo dowiedzieæ na temat nowego znaku TÜV Rheinland. Zgodnie z has³em Jeden dla wszystkich

Bardziej szczegółowo

PHP 5 język obiektowy

PHP 5 język obiektowy PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe 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;

Bardziej szczegółowo

Dziedziczenie. Tomasz Borzyszkowski

Dziedziczenie. Tomasz Borzyszkowski Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.

Bardziej szczegółowo

Podstawy Programowania semestr drugi. Wykład czternasty

Podstawy Programowania semestr drugi. Wykład czternasty Wykład czternasty 1. Polimorfizm Ostatni wykład zakończyliśmy stwierdzeniem, że możemy obiektowi dowolnej klasy przypisa ć obiekt klasy dziedziczącej po tej klasie. Przypisanie takie obejmuje jednak jedynie

Bardziej szczegółowo

Podstawy Języka Java

Podstawy Języka Java Podstawy Języka Java Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania, w którym programy definiuje się za pomocą obiektów elementów łączących

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie Języki i techniki programowania Ćwiczenia 3 Dziedziczenie Klasa abstrakcyjna Autor: Marcin Orchel Klasa abstrakcyjna to taka, że nie możemy tworzyć obiektów tej klasy, możemy jednak dziedziczyć po tej

Bardziej szczegółowo

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

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Informatyka I Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Dziedziczenie klas

Bardziej szczegółowo

Dziedziczenie. dr Jarosław Skaruz

Dziedziczenie. dr Jarosław Skaruz Dziedziczenie dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com Dziedziczenie specjalizacja Dziedziczenie generalizacja Generalizacja-specjalizacja jest takim związkiem pomiędzy klasami,

Bardziej szczegółowo

gdy wielomian p(x) jest podzielny bez reszty przez trójmian kwadratowy x rx q. W takim przypadku (5.10)

gdy wielomian p(x) jest podzielny bez reszty przez trójmian kwadratowy x rx q. W takim przypadku (5.10) 5.5. Wyznaczanie zer wielomianów 79 gdy wielomian p(x) jest podzielny bez reszty przez trójmian kwadratowy x rx q. W takim przypadku (5.10) gdzie stopieñ wielomianu p 1(x) jest mniejszy lub równy n, przy

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium

Bardziej szczegółowo

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to

Bardziej szczegółowo

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

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!! Temat: Klasy typu sealed. Klasy abstrakcyjne. Deklaracja i implementacja interfejsu. Typ Object i operatory is oraz as. Czas ycia obiektu. Destruktory. 1. Klasa typu sealed Przykład 1 Klasa typu sealed

Bardziej szczegółowo

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

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h Programowanie II Lista 3 Modyfikatory dostępu plik TKLientBanku.h plik z funkcją main Przyjaźń Dziedziczenie Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to

Bardziej szczegółowo

ER RATA do ksi¹ ki "Symfonia C++ Stan dard". wydanie 3. (Zawieraj¹ca tak e czysto kosmetyczne poprawki) Sporz¹dzona 4 paÿdziernika 2009.

ER RATA do ksi¹ ki Symfonia C++ Stan dard. wydanie 3. (Zawieraj¹ca tak e czysto kosmetyczne poprawki) Sporz¹dzona 4 paÿdziernika 2009. ER RATA do ksi¹ ki "Symfonia C++ Stan dard". wydanie 3. (Zawieraj¹ca tak e czysto kosmetyczne poprawki) Sporz¹dzona 4 paÿdziernika 2009. Strona wiersz G - od góry D - od do³u Jest Powinno byæ 1 6 D nadzieje

Bardziej szczegółowo

Enkapsulacja, dziedziczenie, polimorfizm

Enkapsulacja, dziedziczenie, polimorfizm 17 grudnia 2008 Spis treści I Enkapsulacja 1 Enkapsulacja 2 Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

1. Podstawy budowania wyra e regularnych (Regex)

1. Podstawy budowania wyra e regularnych (Regex) Dla wi kszo ci prostych gramatyk mo na w atwy sposób napisa wyra enie regularne które b dzie s u y o do sprawdzania poprawno ci zda z t gramatyk. Celem niniejszego laboratorium b dzie zapoznanie si z wyra

Bardziej szczegółowo

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

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;

Bardziej szczegółowo

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

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18 Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Wykład 2 28 lutego 2019 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Język C Krótka

Bardziej szczegółowo

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

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i

Bardziej szczegółowo

Pakiety i interfejsy. Tomasz Borzyszkowski

Pakiety i interfejsy. Tomasz Borzyszkowski Pakiety i interfejsy Tomasz Borzyszkowski Pakiety podstawy W dotychczasowych przykładach nazwy klas musiały pochodzić z jednej przestrzeni nazw, tj. być niepowtarzalne tak, by nie doprowadzić do kolizji

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

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

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Programowanie obiektowe w języku

Programowanie obiektowe w języku Programowanie obiektowe w języku C++ Stanisław Gepner sgepner@meil.pw.edu.pl Dziedziczenie Wstęp Zacznijmy od przykładu Przykład rolniczy Każde zwierzątko wydaje dźwięk Każde się tak samo porusza Musimy

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 10 - klasy abstrakcyjne i interfejsy mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 17 maja 2017 1 / 13 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 3 i 4 - przypomnienie wiadomości o OOP na przykładzie Javy mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 8 marca 2017 1 / 20 mgr inż. Krzysztof Szwarc

Bardziej szczegółowo

Instrukcja aktywacji oprogramowania

Instrukcja aktywacji oprogramowania Instrukcja aktywacji oprogramowania Minimalne wymagania systemowe System operacyjny Windows XP/Vista/7 Pentium 4 2,2 GHz CPU 512 MB RAM Karta graficzna 128 MB RAM QuickTime Player wersja 6 lub póÿniejsza

Bardziej szczegółowo

IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA SPIS TREŒCI KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG

IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA SPIS TREŒCI KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG IDZ DO PRZYK ADOWY ROZDZIA KATALOG KSI EK ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK SPIS TREŒCI KATALOG ONLINE DODAJ DO KOSZYKA CENNIK I INFORMACJE ZAMÓW INFORMACJE ONOWOŒCIACH Sudoku. 101 ³amig³ówek dla zaawansowanych

Bardziej szczegółowo

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

Bardziej szczegółowo

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

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład V - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Programowanie obiektowe Dziedziczenie (inheritance) - mechanizm

Bardziej szczegółowo

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 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

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

Typy sparametryzowane

Typy sparametryzowane Typy sparametryzowane Streszczenie Celem wykładu jest zaprezentowanie typów sparametryzowanych. Czas wykładu 90 minut. Istnieją algorytmy, których zasada działania nie zależy od typu danych wejściowych.

Bardziej szczegółowo

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie dr inż. Jacek Naruniec Kolokwium wykładowe Pierwsze kolokwium 6 kwietnia Drugie kolokwium 1 czerwca Kolokwium poprawkowe 8 czerwca

Bardziej szczegółowo

STRUKTURA MENU STRUKTURA MENU

STRUKTURA MENU STRUKTURA MENU ZA CZNIKI STRUKTURA MENU Po wywo³aniu systemu SM-BOSS (poprzez napisanie BOSS i wciœniêcie klawisza Enter) na ekranie zobaczymy g³ówne menu systemu. Standardowo sk³ada siê ono z pozycji, które pozwalaj¹

Bardziej szczegółowo

Klasy abstrakcyjne, interfejsy i polimorfizm

Klasy abstrakcyjne, interfejsy i polimorfizm Programowanie obiektowe 12 kwietnia 2011 Organizacyjne Klasówka będzie 20 IV 2011. Sale jeszcze są pertraktowane. Materiał do wyjątków włącznie. Można mieć swoje materiały nieelektroniczne. Wywołanie z

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe 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.

Bardziej szczegółowo

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do

Bardziej szczegółowo

Wtedy wystarczy wybrać właściwego Taga z listy.

Wtedy wystarczy wybrać właściwego Taga z listy. Po wejściu na stronę pucharino.slask.pl musisz się zalogować (Nazwa użytkownika to Twój redakcyjny pseudonim, hasło sam sobie ustalisz podczas procedury rejestracji). Po zalogowaniu pojawi się kilka istotnych

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Instalacja sterowników do urz¹dzeñ wielkoformatowych zainstalowanych w firmie Centrum Ksero STUDIO K2 s.c w Pile

Instalacja sterowników do urz¹dzeñ wielkoformatowych zainstalowanych w firmie Centrum Ksero STUDIO K2 s.c w Pile Instalacja sterowników do urz¹dzeñ wielkoformatowych zainstalowanych w firmie Centrum Ksero STUDIO K2 s.c w Pile sterowniki znajduj¹ siê na stronie www.centrumksero.pl w zak³adce DO POBRANIA/STEROWNIKI

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 3 - polimorfizm. dr inż. Robert Nowak - p. 1/14 Powtórzenie Powtórzenie: klasy autonomiczne: konstruktor, konstruktor kopiujacy, operator przypisania, destruktor

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Wykład 9: Polimorfizm i klasy wirtualne

Wykład 9: Polimorfizm i klasy wirtualne Programowanie obiektowe Wykład 9: i klasy wirtualne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Programowanie obiektowe i metody wirtualne 2 W programowaniu obiektowym polimorfizm

Bardziej szczegółowo

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu. Centralna Komisja Egzaminacyjna Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu. Uk ad graficzny CKE 2010 KOD WPISUJE ZDAJ CY PESEL EGZAMIN MATURALNY Z INFORMATYKI POZIOM PODSTAWOWY

Bardziej szczegółowo

Projektowanie obiektowe. Roman Simiński Polimorfizm

Projektowanie obiektowe. Roman Simiński   Polimorfizm Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Polimorfizm Koncepcja polimorfizmu Słowo polimorfizm pochodzi od dwóch greckich słów: poly czyli wiele, morphos czyli

Bardziej szczegółowo

Wykład 7: Pakiety i Interfejsy

Wykład 7: Pakiety i Interfejsy Wykład 7: Pakiety i Interfejsy Plik Źródłowy w Javie Składa się z: instrukcji pakietu (pojedyncza, opcjonalna) instrukcji importujących (wielokrotne, opcjonalne) deklaracji klasy publicznej (pojedyncza,

Bardziej szczegółowo

Komunikat dla osób rozliczających umowy w sprawie nowego sposobu rozliczania umów w związku z likwidacją II fazy rozliczeń.

Komunikat dla osób rozliczających umowy w sprawie nowego sposobu rozliczania umów w związku z likwidacją II fazy rozliczeń. Cel wprowadzenia nowego modelu: Komunikat dla osób rozliczających umowy w sprawie nowego sposobu rozliczania umów w związku z likwidacją II fazy rozliczeń. 1. Unifikacja procesu rozliczeń w skali całego

Bardziej szczegółowo

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Œwie e spojrzenie na miasto

Œwie e spojrzenie na miasto Œwie e spojrzenie na miasto 40 tys. unikalnych u ytkowników 130 tys. ods³on miesiêcznie 10 tys. fanów na Facebooku Portal t ychy.in to dynamicznie rozwijaj¹cy siê portal prezentuj¹cy bie ¹ce informacje

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe i zdarzeniowe Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/23 Programowanie obiektowe i zdarzeniowe wykład 6 polimorfizm Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie

Bardziej szczegółowo

Wykład 6: Dziedziczenie

Wykład 6: Dziedziczenie Wykład 6: Dziedziczenie Dziedziczenie Jeden z filarów obiektowości. Budowa jednej klasy na bazie drugiej, przez dodawanie/przesłanianie jej składowych: nad-klasa klasa bazowa pod-klasa klasa pochodna od

Bardziej szczegółowo

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec PROE wykład 7 kontenery tablicowe, listy dr inż. Jacek Naruniec Prosty kontener oparty na tablicach Funkcja dodawanie pojedynczego słonia do kontenera: 1 2 3 4 5 6 7 11 12 13 14 15 16 17 21 22 23 24 25

Bardziej szczegółowo

Specyfikacja techniczna banerów Flash

Specyfikacja techniczna banerów Flash Specyfikacja techniczna banerów Flash Po stworzeniu własnego banera reklamowego należy dodać kilka elementów umożliwiających integrację z systemem wyświetlającym i śledzącym reklamy na stronie www. Specyfikacje

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 4, część 1 1 Język JAVA podstawy Plan wykładu: 1. Podstawy modelowania obiektowego 2. Konstruktory 3. Dziedziczenie, związki pomiędzy klasami, UML 4. Polimorfizm 5. Klasy abstrakcyjne

Bardziej szczegółowo

AMPS Sterownik temperatur Instrukcja obs³ugi

AMPS Sterownik temperatur Instrukcja obs³ugi AMPS Sterownik temperatur Instrukcja obs³ugi Pod³¹czyæ sterownik do pr¹du. Instalacja powinna byæ przeprowadzona przez wykwalifikowany personel i tylko zgodnie z instrukcj¹. AMPS nie ponosi odpowiedzialnoœci

Bardziej szczegółowo

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

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy 2.4 Dziedziczenie Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładach programów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo aby napisać

Bardziej szczegółowo

Microsoft Management Console

Microsoft Management Console Microsoft Management Console Konsola zarządzania jest narzędziem pozwalającym w prosty sposób konfigurować i kontrolować pracę praktycznie wszystkich mechanizmów i usług dostępnych w sieci Microsoft. Co

Bardziej szczegółowo

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

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Dziedziczenie Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasy Student oraz Pracownik: class Student class Pracownik

Bardziej szczegółowo

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. PROGRAMOWANIE OBIEKTOWE W C++ cz. 2 Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. Dziedziczenie Dziedziczenie jest to technika pozwalaj c na definiowanie nowej klasy przy wykorzystaniu

Bardziej szczegółowo

Polimorfizm. dr Jarosław Skaruz

Polimorfizm. dr Jarosław Skaruz Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody

Bardziej szczegółowo

Ethernet VPN tp. Twój œwiat. Ca³y œwiat.

Ethernet VPN tp. Twój œwiat. Ca³y œwiat. Ethernet VPN tp 19330 Twój œwiat. Ca³y œwiat. Efektywna komunikacja biznesowa pozwala na bardzo szybkie i bezpieczne po³¹czenie poszczególnych oddzia³ów firmy przez wirtualn¹ sieæ prywatn¹ (VPN) oraz zapewnia

Bardziej szczegółowo

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego: Typy klasowe (klasy) 1. Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która definiuje programy za pomocą obiektów

Bardziej szczegółowo

Charakterystyka systemów plików

Charakterystyka systemów plików Charakterystyka systemów plików Systemy plików są rozwijane wraz z systemami operacyjnymi. Windows wspiera systemy FAT oraz system NTFS. Różnią się one sposobem przechowywania informacji o plikach, ale

Bardziej szczegółowo

Do czego służą klasy?

Do czego służą klasy? KLASY Dorota Pylak 2 Do czego służą klasy? W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można wykonywać

Bardziej szczegółowo

Wartości domyślne, szablony funkcji i klas

Wartości domyślne, szablony funkcji i klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu Rozdział 6 Pakowanie plecaka 6.1 Postawienie problemu Jak zauważyliśmy, szyfry oparte na rachunku macierzowym nie są przerażająco trudne do złamania. Zdecydowanie trudniejszy jest kryptosystem oparty na

Bardziej szczegółowo

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

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE. C++ - DZIEDZICZENIE Do najważniejszych cech języka C++ należy możliwość wielokrotnego wykorzystywania kodu Prymitywnym, ale skutecznym sposobem jest kompozycja: deklarowanie obiektów wewnątrz innych klas,

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

API transakcyjne BitMarket.pl

API transakcyjne BitMarket.pl API transakcyjne BitMarket.pl Wersja 20140314 1. Sposób łączenia się z API... 2 1.1. Klucze API... 2 1.2. Podpisywanie wiadomości... 2 1.3. Parametr tonce... 2 1.4. Odpowiedzi serwera... 3 1.5. Przykładowy

Bardziej szczegółowo