1 / 17

CSCI 3328 Object Oriented Programming in C# Chapter 9 : Classes and Objects: A Deeper Look

CSCI 3328 Object Oriented Programming in C# Chapter 9 : Classes and Objects: A Deeper Look. Xiang Lian The University of Texas Rio Grande Valley Edinburg, TX 78539 xiang.lian@utrgv.edu. Objectives. In this chapter, you will Learn some examples of classes and objects

Download Presentation

CSCI 3328 Object Oriented Programming in C# Chapter 9 : Classes and Objects: A Deeper Look

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSCI 3328 Object Oriented Programming in C# Chapter 9: Classes and Objects: A Deeper Look Xiang Lian The University of Texas Rio Grande Valley Edinburg, TX 78539 xiang.lian@utrgv.edu

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

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

  4. 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")); } }

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

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

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

  8. 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; } }

  9. 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(); }

  10. 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); } }

  11. More Keywords: readonly • private readonly int INCREMENT; • By convention, readonly variables are with capital letters like constants • Constructors can initializereadonly variables for multiple times

  12. 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;} }

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

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

  15. 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(); } }

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

More Related