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).

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

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

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

Wpisany przez Piotr Klimek Wtorek, 11 Sierpień 2009 22:36 - Zmieniony Poniedziałek, 03 Czerwiec 2013 03:55

Wpisany przez Piotr Klimek Wtorek, 11 Sierpień 2009 22:36 - Zmieniony Poniedziałek, 03 Czerwiec 2013 03:55 Na początku PHP było przystosowane do programowania proceduralnego. Możliwości obiektowe wprowadzono z językiem C++ i Smalltalk. Obecnie nowy sposób programowania występuje w większości językach wysokopoziomowych

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Programowanie 2. Język C++. Wykład 9. 9.1 Ukrywanie metod, metody nadpisane... 1 9.2 Metody wirtualne, wirtualny destruktor... 2 9.3 Metody czysto wirtualne... 6 9.4 Klasy abstrakcyjne... 7 9.5 Wielodziedziczenie... 9 9.1 Ukrywanie metod,

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

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

Java Język programowania

Java Język programowania Java Język programowania Język Java Bazuje i jest zbliżony do C/C++ Porosty zbiór typów danych (podział na typy prymitywne i obiektowe) Zarządzanie pamięcią i Garbage Collection Zintegrowana synchronizacja

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

Definiowanie własnych klas

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

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

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

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

Firma Informatyczna JazzBIT

Firma Informatyczna JazzBIT Artykuły i obrazy Autor: Stefan Wajda [zwiastun] 10.02.2006. Dodawanie i publikowanie artykułów to najczęstsze zadanie. I chociaż nie jest skomplikowane, może początkujacych wprawiać w zakłopotanie. Trzeba

Bardziej szczegółowo

ABONENCKA CENTRALA TELEFONICZNA SIGMA. Instalacja sterownika USB

ABONENCKA CENTRALA TELEFONICZNA SIGMA. Instalacja sterownika USB ABONENCKA CENTRALA TELEFONICZNA SIGMA Instalacja sterownika USB 1 SIGMA PLATAN Sp. z o.o. 81-855 SOPOT, ul. Platanowa 2 tel. (0-58) 555-88-00, fax (0-58) 555-88-01 www.platan.pl e-mail: platan@platan.pl

Bardziej szczegółowo

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych Spis treści 1. Wstęp... 9 1.1. Inżynieria oprogramowania jako proces... 10 1.1.1. Algorytm... 11 1.2. Programowanie w językach wysokiego poziomu... 11 1.3. Obiektowe podejście do programowania... 12 1.3.1.

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

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski Realizacja ekstensji klasy Paulina Strzelecka, Tomasz Roszkowski Przechowywanie obiektów (odwolañ do obiektów) w Javie typ wbudowany - tablica zbiór klas kontenerowych Paulina Strzelecka, Tomasz Roszkowski

Bardziej szczegółowo

Metoda LBL (ang. Layer by Layer, pol. Warstwa Po Warstwie). Jest ona metodą najprostszą.

Metoda LBL (ang. Layer by Layer, pol. Warstwa Po Warstwie). Jest ona metodą najprostszą. Metoda LBL (ang. Layer by Layer, pol. Warstwa Po Warstwie). Jest ona metodą najprostszą. Po pierwsze - notacja - trzymasz swoją kostkę w rękach? Widzisz ścianki, którymi można ruszać? Notacja to oznaczenie

Bardziej szczegółowo

Mechanizmy refleksji w Javie i C# Autor: Aleksander Nałęczyński

Mechanizmy refleksji w Javie i C# Autor: Aleksander Nałęczyński Mechanizmy refleksji w Javie i C# Autor: Aleksander Nałęczyński Co to jest refleksja? [1/2] Możliwość obserwowania lub manipulowania pracą programu od wewnątrz Problem Zazwyczaj niskopoziomowa struktura

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo

Aplikacje internetowe i rozproszone - laboratorium

Aplikacje internetowe i rozproszone - laboratorium Aplikacje internetowe i rozproszone - laboratorium Web Services (część 3). Do wykonania ćwiczeń potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2005. Visual Studio 2005 jest

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

Sposoby przekazywania parametrów w metodach.

Sposoby przekazywania parametrów w metodach. Temat: Definiowanie i wywoływanie metod. Zmienne lokalne w metodach. Sposoby przekazywania parametrów w metodach. Pojcia klasy i obiektu wprowadzenie. 1. Definiowanie i wywoływanie metod W dotychczas omawianych

Bardziej szczegółowo

C++ - [4-7] Polimorfizm

C++ - [4-7] Polimorfizm Slajd 1 z 14 C++ - [4-7] Polimorfizm Nysa 2004-2013. Autor: Wojciech Galiński. wersja dnia 20 maja 2013 r. Slajd 2 z 14 Polimorfizm i klasa polimorficzna POLIMORFIZM (cytat z Wikipedii) (wielopostaciowość)

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

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

Obiekty: co i jak. Wykonał: Piotr Pięda dla koła naukowego KNI 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

Bardziej szczegółowo

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

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

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

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

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

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy

System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy modelowaniem, a pewien dobrze zdefiniowany sposób jego

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

Multimedia JAVA. Historia

Multimedia JAVA. Historia Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania

Bardziej szczegółowo

Tworzenie instancji klas z konstruktorami Rozdzia³ 2 Tworzenie instancji klas z konstruktorami

Tworzenie instancji klas z konstruktorami Rozdzia³ 2 Tworzenie instancji klas z konstruktorami Rozdzia³ 2 Tworzenie instancji klas z konstruktorami Rozdzia³ 2 Tworzenie instancji klas z konstruktorami W tym rozdziale: Tworzenie konstruktora klasy. Tworzenie wielu konstruktorów dla jednej klasy.

Bardziej szczegółowo

Spis treści. 1 Java T M

Spis treści. 1 Java T M Spis treści 1 Java T M 1 2 Co to jest Platforma Java T M 1 3 Przygotowanie komputera 2 4 Pierwszy program 2 5 Dokumentacja 3 6 Budowa aplikacji. Klasy. 3 7 Pola i metody 4 8 Konstruktory 5 9 Inne proste

Bardziej szczegółowo

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

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

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

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

Leszek Stasiak Zastosowanie technologii LINQ w

Leszek Stasiak Zastosowanie technologii LINQ w Leszek Stasiak Zastosowanie technologii LINQ w C# 1. Wstęp - połączenie Do naszych zadań będziemy używać Microsoft Visual Studio 2010. Stwórzmy nowy projekt Windows Form Application. Mając do dyspozycji

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

Laboratorium 1 - Programowanie proceduralne i obiektowe Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?

Bardziej szczegółowo

Kilka zasad o których warto trzeba pamiętać

Kilka zasad o których warto trzeba pamiętać Kilka zasad o których warto trzeba pamiętać Pamiętaj o celu pisania dokumentu. Dostosuj do niego format strony i jej układ. Pozostaw rozsądnie duże marginesy, nie stłaczaj tekstu. Jeżeli strony będą spięte,

Bardziej szczegółowo

Jak korzystać z Group Tracks w programie Cubase na przykładzie EWQLSO Platinum (Pro)

Jak korzystać z Group Tracks w programie Cubase na przykładzie EWQLSO Platinum (Pro) Jak korzystać z Group Tracks w programie Cubase na przykładzie EWQLSO Platinum (Pro) Uwaga: Ten tutorial tworzony był z programem Cubase 4 Studio, ale równie dobrze odnosi się do wcześniejszych wersji,

Bardziej szczegółowo

KLAUZULE ARBITRAŻOWE

KLAUZULE ARBITRAŻOWE KLAUZULE ARBITRAŻOWE KLAUZULE arbitrażowe ICC Zalecane jest, aby strony chcące w swych kontraktach zawrzeć odniesienie do arbitrażu ICC, skorzystały ze standardowych klauzul, wskazanych poniżej. Standardowa

Bardziej szczegółowo

Praca na wielu bazach danych część 2. (Wersja 8.1)

Praca na wielu bazach danych część 2. (Wersja 8.1) Praca na wielu bazach danych część 2 (Wersja 8.1) 1 Spis treści 1 Analizy baz danych... 3 1.1 Lista analityczna i okno szczegółów podstawowe informacje dla każdej bazy... 3 1.2 Raporty wykonywane jako

Bardziej szczegółowo

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy Instrukcja obsługi programu 2.11. Przygotowanie programu do pracy - ECP Architektura inter/intranetowa System Informatyczny CELAB Przygotowanie programu do pracy - Ewidencja Czasu Pracy Spis treści 1.

Bardziej szczegółowo

Programowanie Obiektowe GUI

Programowanie Obiektowe GUI Programowanie Obiektowe GUI Swing Celem ćwiczenia jest ilustracja wizualnego tworzenia graficznego interfejsu użytkownika opartego o bibliotekę Swing w środowisku NetBeans. Ponadto, ćwiczenie ma na celu

Bardziej szczegółowo

Programowanie Komputerów 3FZ

Programowanie Komputerów 3FZ 1 Programowanie Komputerów 3FZ materiały pomocnicze do laboratorium 2 Spis treści ZAJĘCIA 1. ZAPOZNANIE SIĘ ZE ŚRODOWISKIEM PRACY I REALIZACJA PROSTYCH FUNKCJI W JĘZYKU C++.... 3 1. ZAPOZNANIE SIĘ ZE ŚRODOWISKIEM

Bardziej szczegółowo

Stanowisko Rzecznika Finansowego i Prezesa Urzędu Ochrony Konkurencji i Konsumentów w sprawie interpretacji art. 49 ustawy o kredycie konsumenckim

Stanowisko Rzecznika Finansowego i Prezesa Urzędu Ochrony Konkurencji i Konsumentów w sprawie interpretacji art. 49 ustawy o kredycie konsumenckim Prezes Urzędu Ochrony Konkurencji i Konsumentów Warszawa, 16 maja 2016 r. Stanowisko Rzecznika Finansowego i Prezesa Urzędu Ochrony Konkurencji i Konsumentów w sprawie interpretacji art. 49 ustawy o kredycie

Bardziej szczegółowo

Bazy danych. Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl www.uj.edu.pl/web/zpgk/materialy 9/15

Bazy danych. Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl www.uj.edu.pl/web/zpgk/materialy 9/15 Bazy danych Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl www.uj.edu.pl/web/zpgk/materialy 9/15 Przechowywanie danych Wykorzystanie systemu plików, dostępu do plików za pośrednictwem systemu operacyjnego

Bardziej szczegółowo

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Akademickie Centrum Informatyki PS. Wydział Informatyki PS Akademickie Centrum Informatyki PS Wydział Informatyki PS Wydział Informatyki Sieci komputerowe i Telekomunikacyjne ROUTING Krzysztof Bogusławski tel. 4 333 950 kbogu@man.szczecin.pl 1. Wstęp 2. Tablica

Bardziej szczegółowo

Wprowadzenie do projektu QualitySpy

Wprowadzenie do projektu QualitySpy Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować

Bardziej szczegółowo

Informatyka, Ćwiczenie 1. 1. Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Informatyka, Ćwiczenie 1. 1. Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu Informatyka, Ćwiczenie 1 1. Uruchomienie Microsoft Visual C++ I. ZałoŜenie nowego projektu Wybieramy menu: File>New>Files jak na rys. poniŝej Zapisujemy projekt pod nazwą LAN, w katalogu d:\temp\lab typu

Bardziej szczegółowo

ZA CZNIK C: FUNKCJE KLAWISZY I SPOSOBY WPROWADZANIA PARAMETRÓW

ZA CZNIK C: FUNKCJE KLAWISZY I SPOSOBY WPROWADZANIA PARAMETRÓW ZA CZNIKI ZA CZNIK C: FUNKCJE KLAWISZY I SPOSOBY WPROWADZANIA PARAMETRÓW Pola, do których wprowadzamy dane, mog¹ byæ: znakowe, numeryczne, typu daty oraz typu memo (pola tekstowe). Istniej¹ ró nice w wykorzystaniu

Bardziej szczegółowo

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce)

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce) emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce) Zastosowanie Rozszerzenie to dedykowane jest sklepom internetowych zbudowanym w oparciu

Bardziej szczegółowo

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia

Bardziej szczegółowo

Systemy mikroprocesorowe - projekt

Systemy mikroprocesorowe - projekt Politechnika Wrocławska Systemy mikroprocesorowe - projekt Modbus master (Linux, Qt) Prowadzący: dr inż. Marek Wnuk Opracował: Artur Papuda Elektronika, ARR IV rok 1. Wstępne założenia projektu Moje zadanie

Bardziej szczegółowo

ostatni dzień miesiąca (yyyy-mm-dd) miejsce zam. - ulica nr miejscowość wypełnienia oświadczenia

ostatni dzień miesiąca (yyyy-mm-dd) miejsce zam. - ulica nr miejscowość wypełnienia oświadczenia ostatni dzień miesiąca (yyyy-mm-dd) 2014 11 30 imię i nazwisko: miejsce zam. - ulica nr miejsce zam. - kod Miejscowość Imię nazwisko ul. Xxx nr kod miejscowość miejscowość wypełnienia oświadczenia miejscowość

Bardziej szczegółowo

KATEDRA INFORMATYKI STOSOWANEJ PŁ ANALIZA I PROJEKTOWANIE SYSTEMÓW INFORMATYCZNYCH

KATEDRA INFORMATYKI STOSOWANEJ PŁ ANALIZA I PROJEKTOWANIE SYSTEMÓW INFORMATYCZNYCH KATEDRA INFORMATYKI STOSOWANEJ PŁ ANALIZA I PROJEKTOWANIE SYSTEMÓW INFORMATYCZNYCH Przygotował: mgr inż. Radosław Adamus 1 1 Na podstawie: Subieta K., Język UML, V Konferencja PLOUG, Zakopane, 1999. Wprowadzenie

Bardziej szczegółowo

NAPRAWDÊ DOBRA DECYZJA

NAPRAWDÊ DOBRA DECYZJA KARTA SERWISOWA NAPRAWDÊ DOBRA DECYZJA Gratulujemy! Dokonali Pañstwo œwietnego wyboru: nowoczesne drewniane okna s¹ ekologiczne, a tak e optymalne pod wzglêdem ekonomicznym. Nale ¹ do najwa niejszych elementów

Bardziej szczegółowo

2.Prawo zachowania masy

2.Prawo zachowania masy 2.Prawo zachowania masy Zdefiniujmy najpierw pewne podstawowe pojęcia: Układ - obszar przestrzeni o określonych granicach Ośrodek ciągły - obszar przestrzeni którego rozmiary charakterystyczne są wystarczająco

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Krzysztof Lemay, Naughton Barteczko R. Cadenhead JAVA, Java Podręcznik 2 wykłady dla kaŝdego Języka i ćwiczenia Programowania

Bardziej szczegółowo

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM PROGRAM INWENTARYZACJI Poznań 2011 Spis treści 1. WSTĘP...4 2. SPIS INWENTARZA (EWIDENCJA)...5 3. STAŁE UBYTKI...7 4. INTERPRETACJA ZAŁĄCZNIKÓW

Bardziej szczegółowo

PERSON Kraków 2002.11.27

PERSON Kraków 2002.11.27 PERSON Kraków 2002.11.27 SPIS TREŚCI 1 INSTALACJA...2 2 PRACA Z PROGRAMEM...3 3. ZAKOŃCZENIE PRACY...4 1 1 Instalacja Aplikacja Person pracuje w połączeniu z czytnikiem personalizacyjnym Mifare firmy ASEC

Bardziej szczegółowo

Rysunkowy tutorial Możesz swobodnie dystrybuować ten plik jeśli pozostawisz go w nietkniętym stanie. Możesz także cytować jego fragmenty umieszczając w tekście odnośnik http://mbartyzel.blogspot.com Jak

Bardziej szczegółowo

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

Język JAVA podstawy. wykład 1, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 1, część 3 1 Język JAVA podstawy Plan wykładu: 1. Krótka historia Javy 2. Jak przygotować sobie środowisko programistyczne 3. Opis środowiska JDK 4. Tworzenie programu krok po

Bardziej szczegółowo

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy) Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy) 1. Wejście na stronę http://www.officemedia.com.pl strona główną Office Media 2. Logowanie do zakupowej części serwisu. Login i hasło należy

Bardziej szczegółowo

Karta adaptacyjna GSM

Karta adaptacyjna GSM Proste zamontowanie karty adaptacyjnej GSM Karta adaptacyjna GSM Zainstalowanie karty SIM w karcie adaptacyjnej mini SIM Skrócona instrukcja obsługi Zainstalowanie karty SIM w karcie adaptacyjnej mini

Bardziej szczegółowo

Spring MVC Andrzej Klusiewicz 1/18

Spring MVC Andrzej Klusiewicz 1/18 Spring MVC pierwsza aplikacja Kod źródłowy aplikacji którą tworzę w niniejszym kursie jest do pobrania z adresu: http://www.jsystems.pl/storage/spring/springmvc1.zip Aplikacja jest tworzona w NetBeans,

Bardziej szczegółowo

NOTA TECHNICZNA INTERFEJSY DIAGNOSTYCZNE

NOTA TECHNICZNA INTERFEJSY DIAGNOSTYCZNE NOTA TECHNICZNA INTERFEJSY DIAGNOSTYCZNE 1. INTERFEJS DIAGNOSTYCZNY AE171 2. INTERFEJS DIAGNOSTYCZNY AE171U 3. INTERFEJS DIAGNOSTYCZNY AE171U/AMP 4. INTERFEJS DIAGNOSTYCZNY AE171WI-FI 5. ADAPTER AEKF001AD

Bardziej szczegółowo

INSTRUKCJA OBSŁUGI URZĄDZENIA: 0101872HC8201

INSTRUKCJA OBSŁUGI URZĄDZENIA: 0101872HC8201 INSTRUKCJA OBSŁUGI URZĄDZENIA: PZ-41SLB-E PL 0101872HC8201 2 Dziękujemy za zakup urządzeń Lossnay. Aby uŝytkowanie systemu Lossnay było prawidłowe i bezpieczne, przed pierwszym uŝyciem przeczytaj niniejszą

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 7 Marcin Młotkowski 8 kwietnia 2015 Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w

Bardziej szczegółowo