Right now some of my team is in Object-Orienteed Analysis and Design training. They appreciate that they are learning the concepts. However, the instructor has not presented them with code in any language. Therefore, we are going to do an "OO Confidence Course." The idea is that we will briefly discuss the foundations of OO, look at the language specific implementation and then work through implementing the concepts in code.
This VB.Net and C# comparison guide from Frank McCown will provided to serve as a handy reference to language specific constructs.
If you are working to learn OO on your own or want an additional book to read on the topic that includes code, I can recommend Head First Object Oriented Analysis and Design.
After an initial session with this course, it's likely that someone new to OO would likely take around 4 hours to complete this confidence course. I think an experienced developer could rapidly complete this course.
At a later date, in the course of professional duties, would be a good time to look at defining properties in an interface, CRC cards and unit tests. The purpose of this exercise is to build OO confidence, so we're working hard to avoid "scope creep." Also, because this is an exercise we ended up having an abstract Person and Concrete Person classes. We needed to create the concrete class that others inherit from so we can show off the inheritance polymorphism in the demo section. It's also significant to note that when demonstrating the interface polymorphism that the student class does not inherit from another class.
Here is the "OO Confidence Course"
OO Confidence Course
For Group Discussion
- What is polymorphism?
- How does inheritance work?
- Why do we use encapsulation?
- Language specific discussion
- C# this/subclass, base/superclass
Abstract Person class
This class should have properties/accessors/mutators for:
- Age
- Gender
- Name
Override ToString method to display name and age
Create an abstract method ContactPhoneNumber that returns a string
Concrete Person class
Inherits from Person
Implements the abstract method ContactPhoneNumber
Return "123-555-1212" for the phone number
Employee
Diagram and create an employee class that inherits from ConcretePerson
This class should have properties/accessors/mutators for:
- ID #
- Job Title
The constructor should give the person a default ID of -1 and a blank title, age, gender and name
Overload the constructor to accept an ID#, Title and Name
Override the ToString method of employee to display the data in all of the fields
Create a method that calls the base/superclass toString() - call it superToString
Implement the abstract method ContactPhoneNumber
Return "987-444-3535" for the phone number
Create an Interface called IStatusInfo
The interface definition should require a method isEmployable that returns a boolean
Citizen
This class inherits from person
Implements the IStatusInfo interface (return true)
Student
This class has a single property of name
Implements the IStatusInfo Interface (return false)
Demo Program - Console application
Create an array/arraylist of ConcretePerson objects
Populate the arraylist with data
- 3 employee objects
- 2 Citizen objects
Loop through all of your person objects
- print the base/superclass toString (does this work?)
- print the this/subclass toString
- Print the ContactPhoneNumber
For one employee object
- print the base/superclass toString (does this work?)
- print the this/subclass toString
- print the string returned by superToString
Create 4 IStatusInfo objects
- Set them equal to the 2 citizens you created earlier + 2 students
Loop through all of the IStatusInfo objects
- Print the result of the call to isEmployable