Difference between revisions of "OOP Class4"

esse quam videri
Jump to: navigation, search
(HomeWork)
(Constructors)
Line 157: Line 157:
  
 
Console Example [http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class4/dog1/Dog.cs Dog.cs] <br />
 
Console Example [http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class4/dog1/Dog.cs Dog.cs] <br />
 
Notice that the dog class cannot run. In fact it won't even compile with csc ad an exe. You will get error
 
<pre>error CS5001: Program 'c:\backup\csharp\class4\Dog.exe' does not have an entry point defined</pre>
 
if you try. since the dog class does not have a main method and if we use proper abstaction and ecapsulation then I don't believe
 
that the dog class should have a main method. We will need to write another class that will test drive out dog class. This small program
 
often classed a test or driver class will demonstate how our dog class works. This class will be for demonstation/debug purposes only and will usualy be discarded in the final product.
 
 
[http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class4/dog1/dogTester.cs DogTester.cs]
 
 
Notice that this class will also not compile on it's own. You will get
 
<pre>dogTester.cs(19,3): error CS0246: The type or namespace name 'Dog' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(22,3): error CS0103: The name 'milo' does not exist in the class or namespace 'DogTester'
 
dogTester.cs(25,32): error CS0246: The type or namespace name 'milo' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(26,31): error CS0246: The type or namespace name 'milo' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(27,34): error CS0246: The type or namespace name 'milo' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(28,37): error CS0246: The type or namespace name 'milo' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(31,3): error CS0246: The type or namespace name 'Dog' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(32,3): error CS0246: The type or namespace name 'fido' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(33,37): error CS0246: The type or namespace name 'fido' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(34,31): error CS0246: The type or namespace name 'fido' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(35,34): error CS0246: The type or namespace name 'fido' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(36,37): error CS0246: The type or namespace name 'fido' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(39,3): error CS0246: The type or namespace name 'Dog' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(40,3): error CS0246: The type or namespace name 'roover' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(41,3): error CS0246: The type or namespace name 'roover' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(42,3): error CS0246: The type or namespace name 'roover' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(43,37): error CS0246: The type or namespace name 'roover' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(44,31): error CS0246: The type or namespace name 'roover' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(45,34): error CS0246: The type or namespace name 'roover' could not be found (are you missing a using directive or an assembly reference?)
 
dogTester.cs(46,37): error CS0246: The type or namespace name 'roover' could not be found (are you missing a using directive or an assembly reference?)</pre> 
 
 
You can complile the Dog.cs file as a dll (shared library)
 
<pre>csc /t:library /out:Dog.dll Dog.cs</pre>
 
This will produce the Dog.dll file which will allow us to compile the Test class with a refence to the Dog.dll
 
<pre>csc dogTester.cs /reference:Dog.dll</pre>
 
Now we have a working dogTester.exe that is linked to Dog.dll.
 
 
Sometimes during devolpment of small classes it is easier to combine the new class and the test class into one file.
 
[http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class4/dog1/dogTest.cs dogTest.cs]
 
 
 
 
Visual Studio will help us out later by linking all of our references for us. If I don't feel like maintaining a VS project often I will just make a batch file similar to [http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class4/dog1/dogTest.bat dogTest.bat]
 
 
There is also an open source build tool NAnt http://nant.sourceforge.net/
 
 
<!--Web Example
 
 
    * /infod/jeff/classSource/class4/dog.aspx - source
 
    * /infod/jeff/classSource/class4/dogWeb.cs -->
 
  
 
==In Class==
 
==In Class==

Revision as of 21:45, 10 June 2008

Classes and Objects

Objects

Object-oriented programs are made up of objects.

"An object packages both data and the procedures that operate on that data. The procedures are typically called methods or operations. An object performs an operation when it receives a request(or message) from a client. " - Design Patterns Addison Wesley

Reasons for organizing code into Classes and Objects

  • avoid spaghetti
  • organize code into logical sections
  • simplify program designs
  • reuse

Classes are sections of code that describe real world objects. Classes define what properties and methods an object contains. Properties

define data members of classes. Nouns

Methods

define what classes can do. Verbs

Abstraction

Humans are always abstracting and naming objects. It is how we identify things. Objects are identified by two things: properties(what the have) and methods (what they do).

Classes are used to define objects.

The hardest part about object oriented programming is choosing how to build and implement these abstractions. There are many factors that affect these decisions. It can often be very difficult to find a balance between all of the factors.

  • granularity
the size and acuracy of you abstraction
  • re usability
simpler objects are more reusable
  • flexibility
specialized objects are often more flexible
  • performance
  • portability

Encapsulation

Allows us to use objects with out completely understanding how everything inside the object works. Encapsulation also allows the internal state of objects to be changed easily without affecting other objects or interfaces. For example you don't need to know how the phone system works in order to use a telephone. All you really need to know to use the phone system is how to dial a phone Classes

Classes are used to create objects. a simple example of class syntax in c#

<csharp>public class Dog{ }</csharp>

class syntax full

  [attributes] [access modifiers} class identifier [:base class]
  {class body}

Objects are instances of classes. For instance a Dog class may describe what dogs are like.

All dogs have specific properties like height, weight, color. Dog also have methods like bark. My dog rover is a specific instance of the dog class.


<csharp>// Instantiate Dog objects // Declare an instance of the Dog class Dog firstDog;

// Allocate memory for the dog object firstDog = new Dog();

// Declare and Allocate in one like Dog secondDog = new Dog();</csharp>

The new keyword call the classes constructor which allocated memory on the stack for the object.

access modifier restrictions

public No restrictions available to all members of the class.
private Members marked private are only available to methods of that class.
protected Members marked protected are available to methods of thay class and of classes dreived from that class.
internal Members marked as internal are available to any class within that classes assembly.
protected internal Same as protected and internal

Chair Class

Fields

  • int Height
  • int NumLegs
  • bool HasBack
  • bool HeightAdjustable

Methods

  • RaiseHeight
  • LowerHeight

Chair Class UML

ChairSimpleUML.png

  In class do phone class.

Dog Class

Fields

Micorsoft has started call ing public variables fields

  • string Name
  • int Age
  • int Weight
  • string BarkSound

Methods

  • Bark
  • Eat

Dog Class UML

DogSimpleUML.png

Constructors

A classes constructor is the method that is run when an instance of the class is created. If you do not provide a constructor the complier provides one for you. The constructor is used to initiate all member properties. Unlike intrinsic types variables that are not initialized will be set to 0 or "" or null by the compiler in the default constructor.

The constructor allows you to set default values for the properties of the class. If you do not provide a constructor then a default constructor will be provided. The default constructor will initialize all of the properites in the class to empty/zero/null values.

constructor example

<csharp>public class Dog { public Dog() { //constructor code } }</csharp>

Simple Dog class with constructor

<csharp>//Dog simple class definition public class Dog {

	public string Name;		// the dog's name

public int Age; // the dog's age public int Weight; // the dog's weight public string BarkSound; // the sound of the dog's bark

public Dog() { BarkSound = "Woof!!!"; }

public void Bark() { //put bark code here } public void Eat() { //put eat code here } }</csharp>

Console Example Dog.cs

In Class

  Make and compile a Cat class with a test class.
  *Draw UML for the Cat Class
  *Write test class
  *Compile and test test class
  *Make Dog class
  *Test Dog class with test class

OverLoading Contructors

OverLoading a consructor allows object creation to happen in different ways with different parameters. The class can be overloaded to accept different parameters but each contructor method must have a unique parameter signature. Dog class with overloaded constructor

<csharp>//Dog overloaded class definition public class Dog {

	public string Name;		// the dog's name

public int Age; // the dog's age public int Weight; // the dog's weight public string BarkSound; // the sound of the dog's bark

public Dog() { BarkSound = "Woof!!!"; } public Dog(string newName) { Name = newName; BarkSound = "Woof!!!"; } public Dog(string newName, string newBarkSound ) { Name = newName; BarkSound = newBarkSound; }

public void Bark() { //put bark code here } public void Eat() { //put eat code here } }</csharp>

Console Example dogOverload.cs




HomeWork

Read Chapter 08 in learning c#. Read Chapter 2 in Head Start Java (hand out)



Build a class of your own that describes some real world object then build a test class to demostrate how your class works. 3 pts. It can be anything be creative. Your own class should have properties, methods, and constructors.

Links

<csharp> using System; using System.Collections.Generic; using System.Text;

namespace Cat {

   class Program
   {
       static void Main(string[] args)
       {
           Console.WriteLine("Hello I'm a cat program");
           Cat punkin = new Cat();
           Cat bella = new Cat();
           punkin.NAME = "punkin";
           punkin.WEIGHT = 5;
           bella.NAME = "bella";
           bella.WEIGHT = 20;
           Console.WriteLine(punkin.About());
           punkin.Meow();
           punkin.Eat();
           Console.WriteLine(punkin.About());
           Console.WriteLine(bella.About());
           Console.ReadKey();
       }
   }
   public class Cat
   {
       //Properties
       public string NAME;
       public int AGE;
       public int WEIGHT;
       public bool isUGLY;
       public bool isStoopid;
       public string MEOWSOUND;
       //Constructor
       public Cat()
       {
           //set seom default values
           this.NAME = "some cats name";
           this.AGE = 0;
           this.WEIGHT = 47;
           this.isUGLY = true;
           this.isStoopid = true;
           this.MEOWSOUND = "Meow!!!!";
       }
       //Methods
       public void Meow()
       {
           //write meow sound to the console
           Console.WriteLine(this.MEOWSOUND);
       }
       public void Eat()
       {
           this.WEIGHT++;
           Console.WriteLine("MMMMMM yummy");
       }
       public string About()
       {
           string strAbout = "";
           strAbout += this.NAME;
           strAbout += "\n" + this.WEIGHT;
           strAbout += "\n" + this.AGE;
           if (this.isUGLY)
           {
               strAbout += "\nI'm an Ugly cat";
           }
           else
           {
               strAbout += "\nI'm an nice looking cat";
           }
           if (this.isStoopid)
           {
               strAbout += "\nI'm an stoopid cat";
           }
           return strAbout;
       }
   }

} </csharp>