170 likes | 185 Views
CSCI 3328 Object Oriented Programming in C# Chapter 9 : Classes and Objects: A Deeper Look. Xiang Lian The University of Texas – Pan American Edinburg, TX 78539 lianx@utpa.edu. Objectives. In this chapter, you will Learn some examples of classes and objects
E N D
CSCI 3328 Object Oriented Programming in C# Chapter 9: Classes and Objects: A Deeper Look Xiang Lian The University of Texas – Pan American Edinburg, TX 78539 lianx@utpa.edu
Objectives • In this chapter, you will • Learn some examples of classes and objects • Know how to use keywords: this, static, readonly • Get familiar with the concept of data encapsulation and data hiding
Example: Time Class • Contains 3 int variables declared as private • Also, 3 public methods: SetTime, ToUniversalString and ToString • Does not have a constructor • Instead time is passed in using public SetTime, where the three integers are validated to be within range, if not 0 is assigned • When constructor is not defined, the compiler adds a default one, assigning 0’s to all three int variables
Code for Time1 Class publicclass Time1 { privateint hour; privateint minute; privateint second; publicvoid SetTime(int h, int m, int s) { hour = ((h>=0 && h<24)? h : 0); minute = ((m>=0 && m<60)? m : 0); second = ((s>=0 && s<60)? s : 0); } publicstring ToUniversalString() { returnstring.Format("{0:D2}:{1:D2}:{2:D2}", hour, minute, second); } publicoverridestring ToString() { returnstring.Format("{0}:{1:D2}:{2:D2} {3}", ((hour == 0|| hour == 12) ? 12 : hour%12), minute, second, (hour<12) ? "AM" : "PM")); } }
Example: Time Class (cont'd) • Method ToUniversalString returns a string in universal-time format. • Return string.Format("{0:D2}:{1:D2}:{2:D2}", hour, minute, second); • //like 13:27:06 • Method ToString() overrides string • Return string.Format("{0:D2}:{1:D2}:{2:D2}",((hour==0||hour==12)?12: hour%12)); • // if hour is 0 or 12 it appears as 12 AM, or PM, else it appears from 1 to 11, if hour is <12 it is AM.
Invoke Methods of Time Object • Time1 time = new Time1(); • Console.WriteLine("The initial universal time is" + time.ToUniversalString()); • 00:00:00 • Console.WriteLine("The initial universal time is" + time.ToString()); • 12:00:00 AM • time.SetTime (13, 27, 6); • 13:27:06 • 1:27:06 PM • time.SetTime(99,99,99); • 00:00:00 • 12:00:00 AM
Indexers • The indices can be either integer (as conventional arrays) or non-integer such as the data element name • Indexers are defined like properties in a class • See the example
class IntIndexer { privatestring[] myData; public IntIndexer(int size) { myData = newstring[size]; for (int i = 0; i < size; i++) { myData[i] = "empty"; } } publicstringthis[int pos] { get { return myData[pos]; } set { myData[pos] = value; } }
staticvoid Main(string[] args) { int size = 10; IntIndexer myInd = new IntIndexer(size); myInd[0] = "Artem Chebotko"; myInd[1] = "Robert Scheweller"; myInd[2] = "Pearl Brazier"; myInd[3] = "Laura Grabowski"; myInd[4] = "John Abraham"; myInd[5] = "Emmet Tomai"; myInd[6] = "Yang Liu"; myInd[7] = "Bin Fu"; myInd[8] = "Xiang Lian"; Console.WriteLine("\nIndexer Output\n"); for (int i = 0; i < size; i++) { Console.WriteLine("myInd[{0}]: {1}", i, myInd[i]); } Console.ReadKey(); }
Keyword: this publicclassSimpleTime { privateint hour; privateint minute; privateint second; publicvoidSetTime(int hour, int minute, int second) { this.hour = hour; this.minute = minute; this.second = second; } pubic void Reset() { this.SetTime(0, 0, 0); } }
More Keywords: readonly • private readonly int INCREMENT; • By convention, readonly variables are with capital letters like constants • Constructors can initializereadonly variables for multiple times
More Keywords: static • private static int count = 0; • Maintain the number of objects for a class • Static variables belong to the class, not objects • Static variables can be shared by multiple objects • Static variables can be referred by properties public static int Count { get {return count;} }
Encapsulation • Let the program hide some of the data and operation of a class while exposing others • private • Implementation of a method is hidden from the user, so it appears like a black box • Think of a person driving a car • He does not need to know the internal working of the engine or the way gear changes work, to be able to drive the car (Encapsulation) • Instead, he needs to know things such as how much turning the steering wheel needs, etc. (Abstraction)
Inheritance • A new class is created by absorbing an existing class’s members and enhancing them with new or modified capabilities. • Base class : the existing class from which a new class inherits members. • Derived class : the new class that inherited from the base class. Each new class can become the base class for a future derived class. Is-a relationship and has-a relationship. Is-a represents inheritance. Has-a represents a composition. • Inheritance allows you to reuse code
Inheritance (cont'd) publicclass ParentClass { public ParentClass() { Console.WriteLine("Parent Constructor."); } publicvoid print() { Console.WriteLine("I'm a Parent Class."); } } publicclass ChildClass : ParentClass { public ChildClass() { Console.WriteLine("Child Constructor."); } publicstaticvoid Main() { ChildClass child = new ChildClass(); child.print(); Console.ReadKey(); } }
Polymorphism • Enables you to “program in general” than “program in specific” • Enables us to write applications that process objects that share the same base class in a class hierarchy as if they were all objects of the base class • It allows you to invoke derived class methods through a base class reference during run-time • overrides means they provide their own definition and implementation. • At run-time, when client code calls the method, the CLR looks up the run-time type of the object, and invokes that override of the virtual method • Thus in your source code you can call a method on a base class, and cause a derived class's version of the method to be executed