You are on page 1of 59

C# Programming: From Problem Analysis to Program Design

1
10
Advanced
Object-Oriented
Programming
Features
C# Programming: From Problem Analysis to Program Design
2
nd
Edition

C# Programming: From Problem Analysis to Program Design

2
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 user-
defined classes
Create abstract classes that include abstract
methods
C# Programming: From Problem Analysis to Program Design

3
Chapter Objectives (continued)
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
Work through a programming example that
illustrates the chapters 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 10-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 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 10-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)
Base
class
Derived
class
Figure 10-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 10-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 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 10-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 applications private assembly
C# Programming: From Problem Analysis to Program Design

17
Using Visual Studio to Create DLL Files
Figure 10-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 same way as usual, except
Build instead of Run the project to create the DLL
Figure 10-7 Attempting to run a class library file
C# Programming: From Problem Analysis to Program Design

19
Add Reference to Base Class
Figure 10-8 Adding a reference to a DLL
One of the
first things
to do is Add
a Reference
to the Parent
DLL
C# Programming: From Problem Analysis to Program Design

20
Add Reference to Base Class
(continued)
Figure 10-9 Add Reference dialog box
Use
Browse
button
to
locate
DLL
C# Programming: From Problem Analysis to Program Design

21
Add Reference to Base Class
(continued)
Figure 10-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 10-11 Namespace reference error
C# Programming: From Problem Analysis to Program Design

23
Adding a New Using Statement
(continued)
To avoid error, could type:
public class Student : PersonNamespace.Person
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


Notice
fully
qualified
name
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 objects 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 10-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 10-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
Figure 10-14 Student.dll assembly from ILDASM
Data
fields
.ctors are
constructors

Properties converted
to methods
IL code for
the method

C# Programming: From Problem Analysis to Program Design

29
Abstract Classes
Used to prohibit other classes from instantiating
objects of the base class
Still inherit characteristics from base class in
subclasses
Base class can have data and method members
[access modifier] abstract class ClassIdentifier { } // Base class

C# Programming: From Problem Analysis to Program Design

30
Abstract Methods
Only permitted in abstract classes
Method has no body
Implementation details of the method are left up to
classes derived from the base abstract class
[access modifier] abstract returnType
MethodIdentifier([parameter list]) ; // No { } included
Declaration for abstract method ends with
semicolon; NO method body or curly braces

C# Programming: From Problem Analysis to Program Design

31
Abstract Methods (continued)
Every class that derives from the abstract class
must provide implementation details
Sign a contract that details how to implement its
abstract methods
Syntax error if you use the keyword static or virtual
when defining an abstract method
No additional special keywords are used when a
new class is defined to inherit from the abstract
base class

C# Programming: From Problem Analysis to Program Design

32
Partial Classes
Break class up into two or more files
Each file uses partial class designation
New features of C# 2.0
Used by Visual Studio for Windows applications
Code to initialize controls and set properties is placed in
a somewhat hidden file in a region labeled Windows
Form Designer generated code
File is created following a naming convention of
FormName.Designer.cs or xxx.Designer.cs
Second file stores programmer code

C# Programming: From Problem Analysis to Program Design

33
Interfaces
All .NET languages only support single
inheritance
Think of an interface as a class that is totally
abstract; all methods are abstract
Abstract classes can have abstract and regular methods
Implementing interface agrees to define details for all
of the interfaces methods
Classes can implement any number of interfaces
Only inherit from one class, abstract or nonabstract
C# Programming: From Problem Analysis to Program Design

34
Interfaces (continued)
General form
[modifier] interface InterfaceIdentifier
{
// members - no access modifiers are used
}
Members can be methods, properties, or events
No implementations details are provided for any of its
members
C# Programming: From Problem Analysis to Program Design

35
Defining an Interface
Can be defined as members of a namespace or
class or by compiling to a DLL
Easy approach is to put the interface in a separate
project
Use the Class Library template
Unlike abstract classes, it is not necessary to use
the abstract keyword with methods
Because all methods are abstract
C# Programming: From Problem Analysis to Program Design

36
Defining an Interface (continued)
Build
the
interface
DLL
using
Build
option
from
Build
menu
bar
C# Programming: From Problem Analysis to Program Design

37
Implement the Interface
Follow the same steps as with the Person and
Student DLLs
Add a reference to the file ending in .dll
Type a using statement
Heading for the class definition specifies base
class and one or more interfaces following the
colon (:)
[modifier] class ClassIdentifier : identifier [, identifier]
Base class comes first
C# Programming: From Problem Analysis to Program Design

38
Implement the Interface:
PresentationGUI Application
Figure 10-16 PresentationGUI output using interface methods
C# Programming: From Problem Analysis to Program Design

39
.NET Framework Interfaces
Play an important role in the .NET Framework
Collection classes such as Array class and
HashTable class implement a number of interfaces
C# Programming: From Problem Analysis to Program Design

40
.NET Framework Interfaces
(continued)
.NET Array class is an abstract class
Implements several interfaces (ICloneable; IList;
ICollection; and IEnumerable)
Includes methods for manipulating arrays, such as:
Iterating through the elements
Searching by adding elements to the array
Copying, cloning, clearing, and removing elements from
the array
Reversing elements
Sorting
C# Programming: From Problem Analysis to Program Design

41
NET Framework Interfaces
(continued)
HashTable is not abstract
Implements a number of interfaces
public class Hashtable : IDictionary, ICollection, IEnumerable,
ISerializable, IDeserializationCallback, ICloneable
Implements the IDeserializationCallback interface
Explore the documentation for these classes and
interfaces
C# Programming: From Problem Analysis to Program Design

42
Polymorphism
Ability for classes to provide different
implementations of methods called by the same
name
ToString( ) method
Dynamic binding
Determines which method to call at run time based on
which object calls the method


C# Programming: From Problem Analysis to Program Design

43
Polymorphic Programming in
.NET
Multiple classes can implement the same interface,
each providing different implementation details
for its abstract methods
Black box concept
Abstract classes, classes that derive from them, are
forced to include implementation details for any
abstract method
C# Programming: From Problem Analysis to Program Design

44
Generics
Reduce the need to rewrite algorithms for each
data type
Create generic classes, delegates, interfaces, and
methods
Identify where data will change in the code
segment by putting a placeholder in the code for
the type parameters



C# Programming: From Problem Analysis to Program Design

45
Generic Classes
Defined by inserting an identifier between left and
right brackets on the class definition line
Example
public class GenericClass <T>
{
public T dataMember;
}
//To instantiate an object, replace the T with data type
GenericClass <string> anIdentifer = new GenericClass <string>( );

C# Programming: From Problem Analysis to Program Design

46
Generic Methods
Similar to defining a generic class
Insert identifier between left and right brackets on the
method definition line to indicate it is a generic method
Example
public void SwapData <T> (ref T first, ref T second)
{
T temp;
temp = first;
first = second;
second = temp;
}
//To call the method, specify the type following method name
SwapData <string> (ref firstValue, ref secondValue);

C# Programming: From Problem Analysis to Program Design

47
StudentGov
Application
Example
Figure 10-18 Problem specification for StudentGov example
C# Programming: From Problem Analysis to Program Design

48
StudentGov Application Example
(continued)
C# Programming: From Problem Analysis to Program Design

49
StudentGov Application Example
(continued)
Figure 10-19 Prototype for StudentGov example
C# Programming: From Problem Analysis to Program Design

50
StudentGov Application Example
(continued)
Figure 10-20 Class diagrams for StudentGov example
C# Programming: From Problem Analysis to Program Design

51
StudentGov
Application
Example
(continued)
Figure 10-21 References added to StudentGov example
C# Programming: From Problem Analysis to Program Design

52
Properties: StudentGov
Application
C# Programming: From Problem Analysis to Program Design

53
Properties: StudentGov
Application (continued)
C# Programming: From Problem Analysis to Program Design

54
StudentGov
Application
Example (continued)
Figure 10-22 Setting the StartUp Project
C# Programming: From Problem Analysis to Program Design

55
StudentGov Application Example
(continued)
Figure 10-23 Part of the PresentationGUI assembly
C# Programming: From Problem Analysis to Program Design

56
StudentGov Application Example
(continued)
Figure 10-24 Output from StudentGov example
C# Programming: From Problem Analysis to Program Design

57
Chapter Summary
Major features of object-oriented languages
Abstraction
Encapsulation
Inheritance
Polymorphism
Multitier applications using component-based
development methods
C# Programming: From Problem Analysis to Program Design

58
Chapter Summary (continued)
Use inheritance to extend the functionality of user-
defined classes
Abstract classes
Abstract methods
Partial classes
Interfaces


C# Programming: From Problem Analysis to Program Design

59
Chapter Summary (continued)
Why polymorphic programming?
Generics
Generic Classes
Generic Methods

You might also like