11 Advanced Object-Oriented Programming Features C# Programming: From Problem Analysis to Program Design 3rd Edition C# Programming: From Problem Analysis to Program Design 1 Chapter Objectives • Learn the major features of object-oriented languages • Design and develop multitier applications using component-based development methods • Use inheritance to extend the functionality of userdefined classes • Create abstract classes that include abstract methods C# Programming: From Problem Analysis to Program Design 2 Chapter Objectives (continued) • Distinguish the differences between sealed and abstract classes • Become aware of partial classes • Design and implement interfaces • Understand why polymorphic programming is a common goal in .NET • Explore generics and learn how to create generic classes and generic methods C# Programming: From Problem Analysis to Program Design 3 Chapter Objectives (continued) • Investigate static versus dynamic typing and become aware of when dynamic and var types are used • Work through a programming example that illustrates the chapter’s concepts C# Programming: From Problem Analysis to Program Design 4 Object-Oriented Language Features • Abstraction – Abstract or identify the objects involved in the problem • Encapsulation – Packaging data and behaviors into a single unit • Inheritance – Reuse of code through extending program units • Polymorphism – Multiple implementations of the same behaviors C# Programming: From Problem Analysis to Program Design 5 Component-Based Development Figure 11-1 Component-based development C# Programming: From Problem Analysis to Program Design 6 Component-Based Development (continued) • Multitier applications – Data access tier for accessing data from text files and databases – Graphical user interface tier for user interaction • Windows • Web • Components implemented through classes in C# • Class library files with a dynamic link library (DLL) extension C# Programming: From Problem Analysis to Program Design 7 Inheritance • Enables you to: – Create a general class and then define specialized classes that have access to the members of the general class • Associated with an "is a" relationship – Specialized class “is a” form of the general class • Classes can also have a "has a" relationship, not associated with inheritance – "has a" relationship is associated with containment or aggregation C# Programming: From Problem Analysis to Program Design 8 Inheriting from the Object Class • Every object inherits four methods as long as reference to the System namespace included Figure 11-2 Methods inherited from an object C# Programming: From Problem Analysis to Program Design 9 Inheriting from Other .NET FCL Classes • Add functionality to programs with minimal programming • Extend System.Windows.Forms.Form class to build GUIs (Button, Label, TextBox, ListBox) Derived class Base class Figure 11-3 Derived class C# Programming: From Problem Analysis to Program Design 10 Creating Base Classes for Inheritance • Can define your own classes from which other classes can inherit • Base class is called the super or parent class • Data members are defined with a private access modifier • Constructors are defined with public access modifiers • Properties offer public access to data fields C# Programming: From Problem Analysis to Program Design 11 Overriding Methods • Replace the method defined at a higher level • Keyword override included in derived class – Base method includes virtual, abstract, or override keyword • Overriding differs from overloading a method – Overridden methods have exactly the same signature – Overloaded methods each have a different signature Figure 11-4 ToString( ) signature C# Programming: From Problem Analysis to Program Design 12 Overriding Methods (continued) • Example of polymorphism – ToString( ) method can have many different definitions – ToString( ) uses the virtual modifier, implying that any class can override it • Derived classes inherit from a base class – Also called subclasses or child classes • Protected access modifiers – Access only to classes that derived from them – Access to change data in the base class C# Programming: From Problem Analysis to Program Design 13 Calling the Base Constructor • To call the constructor for the base class, add keyword :base between the constructor heading for the subclass and the opening curly brace public Student(string id, string fname, string lname, string maj, int sId) :base (id, lname, fname) // base constructor arguments { ... • Base constructor must have a constructor with matching signature C# Programming: From Problem Analysis to Program Design 14 Using Members of the Base Class • Scope – Methods defined in subclass take precedence when named the same name as member of a parent class • Can call an overridden method of the base class – Use keyword base before the method name return base.GetSleepAmt( ) // Calls GetSleepAmt( ) in // parent class C# Programming: From Problem Analysis to Program Design 15 Relationship between the Person and Student Classes Figure 11-5 Inheritance class diagram C# Programming: From Problem Analysis to Program Design 16 Making Stand-Alone Components • Compile class and create an assembly – Assemblies are units configured and deployed in .NET • Classes can be compiled and stored as a dynamic link library (DLL) instead of into the EXE file type • Adds a reference to the DLL – That referenced file with the .dll extension becomes part of the application’s private assembly C# Programming: From Problem Analysis to Program Design 17 Using Visual Studio to Create DLL Files Figure 11-6 Creating a DLL component C# Programming: From Problem Analysis to Program Design 18 Build Instead of Run to Create DLL • Create the parent class first in order to use IntelliSense • Create the subclass class in the same way as usual, except Build instead of Run the project to create the DLL Figure 11-7 Attempting to run a class library file C# Programming: From Problem Analysis to Program Design 19 Add Reference to Base Class One of the first things to do is Add a Reference to the Parent DLL Figure 11-8 Adding a reference to a DLL C# Programming: From Problem Analysis to Program Design 20 Add Reference to Base Class (continued) Use Browse button to locate DLL Figure 11-9 Add Reference dialog box C# Programming: From Problem Analysis to Program Design 21 Add Reference to Base Class (continued) Figure 11-10 Locating the Person.dll component C# Programming: From Problem Analysis to Program Design 22 Adding a New Using Statement • In the subclass class, if you simply type the following, you receive an error message public class Student : Person Figure 11-11 Namespace reference error C# Programming: From Problem Analysis to Program Design 23 Adding a New Using Statement (continued) Notice • To avoid error, could type: public class Student : PersonNamespace.Person fully qualified name • Better option is to add a using directive using PersonNamespace; // Use whatever name you // typed for the namespace for Person • After typing program statements, build the DLL from the Build option under the Build menu bar C# Programming: From Problem Analysis to Program Design 24 Creating a Client Application to Use the DLL • DLL components can be reused with many different applications • Two steps – Add a reference to the DLL components – Include a using statement with the namespace • Then declare an object of the component type(s) • Use members of the derived, base, or referenced classes C# Programming: From Problem Analysis to Program Design 25 Creating a Client Application to Use the DLL (continued) Figure 11-12 DLLs referenced in the PresentationGUI class C# Programming: From Problem Analysis to Program Design 26 Creating a Client Application to Use the DLL (continued) Figure 11-13 PresentationGUI output referencing two DLLs C# Programming: From Problem Analysis to Program Design 27 Using ILDASM to View the Assembly • (ILDASM): Intermediate Language Disassembler tool • Assembly shows the signatures of all methods, data fields, and properties • One option – display the source code as a comment in the assembly • Can be run from the command line or from within the Visual Studio IDE – Must be added as an external tool in Visual Studio C# Programming: From Problem Analysis to Program Design 28 ILDASM to View the Assembly Data fields .ctors are constructors IL code for the method Properties converted to methods Figure 11-14 Student.dll assembly from ILDASM C# Programming: From Problem Analysis to Program Design 29