Anglický text: Lesson 8: Class Inheritance



Podobné dokumenty
EU peníze středním školám digitální učební materiál

Škola: Střední škola obchodní, České Budějovice, Husova 9. Inovace a zkvalitnění výuky prostřednictvím ICT

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

VY_32_INOVACE_06_Předpřítomný čas_03. Škola: Základní škola Slušovice, okres Zlín, příspěvková organizace

Dědičnost (inheritance)

Introduction to MS Dynamics NAV

LOGBOOK. Blahopřejeme, našli jste to! Nezapomeňte. Prosím vyvarujte se downtrade

Tento materiál byl vytvořen v rámci projektu Operačního programu Vzdělávání pro konkurenceschopnost.

Výukový materiál zpracovaný v rámci operačního programu Vzdělávání pro konkurenceschopnost

Czech Republic. EDUCAnet. Střední odborná škola Pardubice, s.r.o.

II_2-01_39 ABBA,Happy New Year, řešení II_2-01_39 ABBA,Happy New Year, for students

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo


2. Entity, Architecture, Process

Výukový materiál zpracovaný v rámci projektu EU peníze do škol. illness, a text

USING VIDEO IN PRE-SET AND IN-SET TEACHER TRAINING

Informace o písemných přijímacích zkouškách. Doktorské studijní programy Matematika

Čipové karty Lekařská informatika

My Year Manager is Vedoucí našeho ročníku je. P.E. is on Tělocvik mám v

POSLECH. Cinema or TV tonight (a dialogue between Susan and David about their plans for tonight)

Postup objednávky Microsoft Action Pack Subscription

CZ.1.07/1.5.00/

DC circuits with a single source

24. listopadu 2013, Brno Připravil: David Procházka

Základy objektové orientace I. Únor 2010

Popis využití: Výukový materiál s úkoly pro žáky s využitím dataprojektoru, notebooku Čas: 15 minut

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Vánoční sety Christmas sets

Kdo jsme Čím se zabýváme Nabídka služeb pro veřejnou správu Ověřeno v praxi u tisíce uživatelů v podnikatelské a bankovní sféře Plně využitelné u

PSANÍ. M e t o d i c k é p o z n á m k y k z á k l a d o v é m u t e x t u :

Gymnázium, Brno, Slovanské nám. 7 WORKBOOK. Mathematics. Teacher: Student:

User manual SŘHV Online WEB interface for CUSTOMERS June 2017 version 14 VÍTKOVICE STEEL, a.s. vitkovicesteel.com

Tabulka 1 Stav členské základny SK Praga Vysočany k roku 2015 Tabulka 2 Výše členských příspěvků v SK Praga Vysočany Tabulka 3 Přehled finanční

Generické programování

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

DUM DIGITÁLNÍ UČEBNÍ MATERIÁL ANGLIČTINA. Mgr. Kateřina Kasanová

2N Voice Alarm Station

Číslo projektu: CZ.1.07/1.5.00/ Název projektu: Inovace a individualizace výuky

Programování v C++ 1, 6. cvičení

EU přijímá nový program pro bezpečnější internet: 55 milionů EUR na bezpečnější internet pro děti

PB161 Programování v jazyce C++ Přednáška 4

Digitální učební materiál

Škola: Střední škola obchodní, České Budějovice, Husova 9. Inovace a zkvalitnění výuky prostřednictvím ICT

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

PRODEJNÍ EAUKCE A JEJICH ROSTOUCÍ SEX-APPEAL SELLING EAUCTIONS AND THEIR GROWING APPEAL

Projekt: ŠKOLA RADOSTI, ŠKOLA KVALITY Registrační číslo projektu: CZ.1.07/1.4.00/ EU PENÍZE ŠKOLÁM

WYSIWYG EDITOR PRO XML FORM

UPM3 Hybrid Návod na ovládání Čerpadlo UPM3 Hybrid 2-5 Instruction Manual UPM3 Hybrid Circulation Pump 6-9

Byznys a obchodní záležitosti

Configuration vs. Conformation. Configuration: Covalent bonds must be broken. Two kinds of isomers to consider

Chování konstruktorů a destruktorů při dědění

PRAVIDLA ZPRACOVÁNÍ STANDARDNÍCH ELEKTRONICKÝCH ZAHRANIČNÍCH PLATEBNÍCH PŘÍKAZŮ STANDARD ELECTRONIC FOREIGN PAYMENT ORDERS PROCESSING RULES

CLIL a projektové vyučování

PRIMÁRNÍ MODÁLNÍ SLOVESA CAN

Projekt: ŠKOLA RADOSTI, ŠKOLA KVALITY Registrační číslo projektu: CZ.1.07/1.4.00/ EU PENÍZE ŠKOLÁM

NMIN201 Objektově orientované programování 1 / :36:09

USER'S MANUAL FAN MOTOR DRIVER FMD-02

Jak importovat profily do Cura (Windows a

Angličtina O-06 A 1. Označte správnou variantu. (10x1 bod)

Aktuální trendy ve výuce a testování cizích jazyků v akademickém prostředí

PART 2 - SPECIAL WHOLESALE OFFER OF PLANTS SPRING 2016 NEWS MAY 2016 SUCCULENT SPECIAL WHOLESALE ASSORTMENT

Problém identity instancí asociačních tříd

Invitation to ON-ARRIVAL TRAINING COURSE for EVS volunteers

Jazyk C++ I. Polymorfismus

Content Language level Page. Mind map Education All levels 2. Go for it. We use this expression to encourage someone to do something they want.

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

RIMINI. Samozavírací hydraulické závěsy Self-closing hydraulic hinges

WORKSHEET 1: LINEAR EQUATION 1

Arduino Ethernet Shield W5100 R3

POSLECH. M e t o d i c k é p o z n á m k y k z á k l a d o v é m u t e x t u :

Výukový materiál zpracován v rámci projektu EU peníze školám

Tento materiál byl vytvořen v rámci projektu Operačního programu Vzdělávání pro konkurenceschopnost.

POSLECH. Kate and Jim are friends. It's Thursday afternoon and they are talking about their free time activities.

SPECIAL THEORY OF RELATIVITY

Ošetřovací plán Treatment Plan

Just write down your most recent and important education. Remember that sometimes less is more some people may be considered overqualified.

NPRG031 Programování II 1 / :25:46

PB161 Programování v jazyce C++ Přednáška 7

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Anglický jazyk 5. ročník

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Jméno autora: Mgr. Alena Chrastinová Datum vytvoření: Číslo DUMu: VY_32_INOVACE_14_AJ_G

Objektové programování

PB161 Programování v jazyce C++ Přednáška 7

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Java Cvičení 05. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

PRÁCE S UKÁZKAMI ODPOVĚDÍ MATURANTŮ NA DVD

Škola: Střední škola obchodní, České Budějovice, Husova 9. Inovace a zkvalitnění výuky prostřednictvím ICT

Digitální učební materiál

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Seminář Java IV p.1/38

Programování v C++ 2, 4. cvičení

Číslo materiálu: VY 32 INOVACE 29/18. Číslo projektu: CZ.1.07/1.4.00/

EURO přeshraniční platba

Čtvrtý Pentagram The fourth Pentagram

Jazyk C# (seminář 3)

Dědění, polymorfismus

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

VY_22_INOVACE_91 P4 U3 Revision

Transkript:

Ukázka odborného technického překladu. Zdroj původního textu: http://www.csharpstation.com/tutorials/lesson08.aspx Poznámka k překladům příkladů: Za normálních okolností by samozřejmně bylo lepší v úryvcích kódu nepřekládat nic (zvlášť třeba v technické dokumentaci), zde, vzhledem k tomu, že se jedná o učební text, se zdálo vhodné přeložit názvy tříd a některé řetězce. Anglický text: Lesson 8: Class Inheritance This lesson teaches about C# Inheritance. Our objectives are as follows: Implement Base Classes. Implement Derived Classes. Initialize Base Classes from Derived Classes. Learn How to Call Base Class Members. Learn How to Hide Base Class Members. Inheritance is one of the primary concepts of object-oriented programming. It allows you to reuse existing code. Through effective employment of reuse, you can save time in your programming. Listing 8-1. Inheritance: Parent.cs public class Parent public Parent() Console.WriteLine("Parent Constructor."); Console.WriteLine("I'm a Parent Class."); public class ChildClass : ParentClass public ChildClass() Console.WriteLine("Child Constructor."); ChildClass child = new ChildClass(); Output: child.print(); Parent Constructor. Child Constructor. I'm a Parent Class.

Listing 8-1 shows two classes. The top class is named ParentClass and the main class is called ChildClass. What we want to do is create a child class, using existing code from ParentClass. First we must declare our intention to use ParentClass as the base class of ChildClass. This is accomplished through the ChildClass declaration public class ChildClass : ParentClass. The base class is specified by adding a colon, ":", after the derived class identifier and then specifying the base class name. Note: C# supports single class inheritance only. Therefore, you can specify only one base class to inherit from. However, it does allow multiple interface inheritance, a subject covered in a later lesson. ChildClass has exactly the same capabilities as ParentClass. Because of this, you can also say ChildClass "is" a ParentClass. This is shown in the Main() method of ChildClass when the print() method is called. ChildClass does not have its own print() method, so it uses the ParentClass print() method. You can see the results in the 3rd line of output. Base classes are automatically instantiated before derived classes. Notice the output from Listing 8-1. The ParentClass constructor executed before the ChildClass constructor. Listing 8-2. Derived Class Communicating with Base Class: BaseTalk.cs public class Parent string parentstring; public Parent() Console.WriteLine("Parent Constructor."); public Parent(string mystring) parentstring = mystring; Console.WriteLine(parentString); Console.WriteLine("I'm a Parent Class."); public class Child : Parent public Child() : base("from Derived") Console.WriteLine("Child Constructor."); public new void print() base.print(); Console.WriteLine("I'm a Child Class."); Child child = new Child();

child.print(); ((Parent)child).print(); Output: From Derived Child Constructor. I'm a Parent Class. I'm a Child Class. I'm a Parent Class. Derived classes can communicate with base classes during instantiation. Listing 8-2 shows how this is done at the child constructor declaration. The colon, ":", and keyword base call the base class constructor with the matching parameter list. If the code had not appended base("from Derived") to the Derived constructor, the code would have automatically called Parent(). The first line of output shows the base class constructor being called with the string "From Derived". Sometimes you may want to create your own implementation of a method that exists in a base class. The Child class does this by declaring its own print() method. The Child print() method hides the Parent print() method. The effect is the Parent print() method will not be called, unless we do something special to make sure it is called. Inside the Child print() method, we explicitly call the Parent print() method. This is done by prefixing the method name with "base.". Using the base keyword, you can access any of a base class public or protected class members. The output from the Child print() method is on output lines 3 and 4. Another way to access base class members is through an explicit cast. This is done in the last statement of the Child class Main() method. Remember that a derived class is a specialization of its base class. This fact allows us to perform a cast on the derived class, making it an instance of its base class. The last line of output from Listing 8-2 shows the Parent print() method was indeed executed. Notice the new modifier on the Child class print() method. This enables this method to hide the Parent class print() method and explicitly states your intention that you don't want polymorphism to occur. Without the new modifier, the compiler will produce a warning to draw your attention to this. See the next lesson for a detailed discussion of polymorphism. In summary, you know how to create a derived/base class relationship. You can control instantiation of your base class and call its methods either implicitly or explicitly. You also understand that a derived class is a specialization of its base class.

Český text: Lekce 8 Dědičnost tříd Tato lekce se zabývá dědičností v jazyce C#. Co se naučíme: Implementace základních tříd. Implementace odvozených tříd. Inicializace základních tříd z odvozených. Přístup ke členům základních tříd. Skrývání členů základních tříd. Dědičnost je jedním ze základních konceptů objektově orientovaného programování. Je to nástroj pro znovupoužitelnost existujícího kódu. Efektivní využití znovupoužitelnosti (reusability) může při programování ušetřit spoustu času. Příklad 8-1. Dědičnost: Base.cs public class Predek public Predek() Console.WriteLine("Konstruktor předka."); Console.WriteLine("Jsem Předek."); public class Potomek: Predek public Potomek() Console.WriteLine("Konstruktor potomka."); Potomek potomek = new Potomek (); Výstup: potomek.print(); Konstruktor předka. Konstruktor potomka. Jsem Předek. Příklad 8-1 ukazuje dvě třídy. První z nich se jmenuje Predek, druhá, která tvoří hlavní třídu programu se jmenuje Potomek. V příkladu jsme si ukázali, jak vytvořit potomka s využitím existujícího kódu z třídy Predek.

Nejdřív deklarujeme Predek jako základní třídu pro třídu Potomek. To je zajištěno konstrukcí public class Potomek : Predek. Základní třídu v deklaraci specifikujeme přidáním dvojtečky za název odvozené třídy a následnou specifikací názvu základní třídy. Poznámka: C# podporuje pouze jednoduchou dědičnost. Proto lze specifikovat pouze jednu třídu předka. Vícenásobná dědičnost je podporována u rozhraní (interface). Ta jsou probrána v pozdějších lekcích. Potomek má stejné schopnosti jako Predek, takže můžeme říct, že Potomek je ("is a") Predek. To je demonstrováno v metodě Main() třídy Potomek když je zavolána metoda print(). Potomek nemá vlastní metodu print(), takže místo ní používá tu převzatou ze třídy Predek. Důsledek je vidět na třetím řádku výstupu. Základní třídy jsou automaticky instanciovány před odvozenými. Všimněte si výstupu z příkladu 8-1: Konstruktor třídy Predek je vykonán před konstruktorem třídy Potomek. Příklad 8-2. Odvozená třída komunikující se základní třídou: BaseTalk.cs public class Predek string predekstring; public Predek() Console.WriteLine("Konstruktor Předka."); public Predek(string mystring) predekstring = mystring; Console.WriteLine(predekString); Console.WriteLine("Jsem Předek."); public class Potomek : Predek public Potomek(): base("z odvozené") Console.WriteLine("Konstruktor Potomka."); public new void print() base.print(); Console.WriteLine("Jsem Potomek."); Potomek potomek = new Potomek(); potomek.print(); ((Predek)potomek).print();

Výstup: Z odvozené Konstruktor potomka. Jsem Předek. Jsem Potomek. Jsem Předek. Odvozené třídy mohou během procesu instanciace komunikovat se základními třídami. Příklad 8-2 ukazuje, jak to provést při deklaraci konstruktoru potomka. Dvojtečka a klíčové slovo base způsobí volání konstruktoru základní třídy s příslušnými parametry. Kdyby k deklaraci konstruktoru potomka nebyl připojen text base("z odvozené"), automaticky by se zavolal bezparametrický konstruktor Predek(). První řádek výstupu ukazuje, že konstruktor předka byl zavolán s argumentem "Z odvozené". Někdy je potřeba vytvořit vlastní implementaci metody, která existuje v základní třídě. Přesně to dělá třída Potomek se svou metodou print(). Metoda print() třídy Potomek překrývá metodu print() třídy Predek. Důsledkem je, že print() třídy Predek nebude zavoláno, pokud neuděláme něco, abychom takové volání vynutili. Metoda print() třídy Potomek ve svém kódu explicitně volá metodu print() třídy Predek. To je zajištěno prefixem base před názvem metody. Klíčové slovo base zpřístupňuje všechny členy základní třídy, které mají viditelnost public nebo protected. Výstup z metody print() třídy Base je na řádcích 3 a 4. Další cestou jak zpřístupnit členy základní třídy je použití explicitního přetypování. Tento postup je demonstrován na posledním řádku metody Main() třídy Potomek. Pamatujte si, že odvozená třída je specializací své bázové třídy. Díky tomu můžeme provést přetypování z odvozené třídy na základní. Poslední řádek výstupu příkladu 8-2 ukazuje, že jsme tímto postupem skutečně dosáhli zavolání metody print() třídy Predek. Všimněte si modifikátoru new u metody print() třídy Potomek. Díky němu metoda skrývá metodu print() třídy Predek. Tento modifikátor explicitně zdůrazňuje, že nechceme využít polymorfismus. Bez něj by kompilátor vygeneroval varování, aby vás na situaci upozornil. Polymorfismus je detailně probírán v následující lekci. Shrnutí: Naučili jsme se vytvářet třídy ve vztahu základní - odvozená. Umíme ovládat instanciaci základní třídy a implicitně i explicitně volat její metody. Také víme, že odvozená třída je specializací své základni třídy.