Difference between revisions of "OOP Class9"

esse quam videri
Jump to: navigation, search
(Delgates)
 
(38 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Category:OOP]]
+
[[Category:IAM Classes]]
  
==Interfaces==
+
==PolyMorphism==
  
Interfaces - implements or derives from
+
Using the least specific class to increase reuse.
  
An interface is a class that lacks implementation. The only thing it contains are definitions of events, indexers, methods and/or properties. The reason interfaces only provide definitions is because they are inherited by classes and structs, which must provide an implementation for each interface member defined. Since classes in c# can only be derived from one other class ( in c++ it is possible to derive from many) interfaces are used for multiple inheritance. Like abstract classes you cannot create an instance of an interface on derive from it.
+
==Value vs Reference Types==
  
You cannot create an instance of an interface.
+
int, float, string and most built in types are value types
  
Interfaces cannot contain any implementation.
+
defined classes are Reference types.
  
Interfaces are basically a contract between classes. When a class implements an interface it is promising to implement the propery and method signature of that interface. This helps with abstraction and encurages polymorphism.
+
==Review Coins==
  
In order to specify that a class implements an inteface you use a : after the class name:
+
?'s
  
<csharp>public class NewDog : IWalkable</csharp>
+
==Review MotorVehicle==
  
This means that the NewDog class implements the IWalkable interface.
+
?'s
  
Interfaces support multple inheritance.
+
==Motorvehicle Diagram==
  
<csharp>public class NewDog : IWalkable,IBark</csharp>
+
[[Oop Motorvehicle Diagram]]
  
Now the NewDog Class promises to implement the IWalkable and the I Bark interface.  
+
http://iam.colum.edu/oop/browser/browser.aspx?f=/classsource/class7/MotorvehicleRace
  
 +
==Private instance data members - accessors==
 +
Microsoft has stared calling private variables with accessors Properties
  
Phone interface example with single inhertance
+
Private class memebers the use get and set keyword to set and retrieve data. Get and set are known as accessor methods private members are helpful when you want to also do other things when a data member is changed or change the rutern value under certain conditions. C# Programmer's Reference - Accessors http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfaccessorspg.asp. Lastly accessor also make read only and write only variables possible
  
[http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class8/phoneIFace.cs phoneIFace.cs] -source
+
<syntaxhighlight lang="csharp">//private string color read/write
 +
private string color;
  
Multiple interface inheritance - inherits IPhone, Cell, POTS
+
public string Color
[http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class8/phoneIFacePOTS.cs phoneIFacePOTS.cs] -source
+
{
 +
  get
 +
  {
 +
  return color;
 +
  }
 +
  set
 +
  {
 +
  color = value;
 +
  }
 +
}
  
Phone Interface UML
+
//private string color read only
 +
private string color;
  
[[Image:PhoneInterface.png]]
+
public string Color
 +
{
 +
  get
 +
  {
 +
  return color;
 +
  }
 +
}</syntaxhighlight>
  
===IComparable and Polymorphism===
 
  
In order to allow build in Arry type like the ArrayList to be able to Sort and Reverse your classes need to implement the IComparable Interface.
+
Another property that is a good candidate for a private instance data member is the dogs age
[http://msdn2.microsoft.com/en-US/library/system.icomparable.aspx System.IComparable on MSDN]
 
  
After your classes implement this interface it will allow for polymorphic method like Sort and Reverse to work.
+
<syntaxhighlight lang="csharp">
 +
private string age;
  
Here is an exmaple of a dog array that will not sort
+
public int Age
 +
{
 +
  //age can only be accessed with get there is no set accessor
 +
  //age must be set with HappyBirthday()
 +
  get
 +
  {
 +
  return age;
 +
  }
 +
}
  
[http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class8/DogCompare/dogSimple.cs dogSimple.cs]
+
public int HappyBirthday()
 +
{
 +
  age++;
 +
  return age;
 +
}
  
This IComplare Interface has calls for a methpod called CompareTo. The CompareTo method shoudl retun an positive integerg if that the current object is grater that the object that is being compared.
 
It should oreturn 0 is they are equal.
 
And it should return a negative integer is the current object is less than the compared object.
 
  
The UML for IComparable<br/>
+
</syntaxhighlight>
[[Image:IComparable.png]]
 
  
The UML for a dog that implemets IComparable
+
==Windows forms==
  
[[Image:DogIComparable.png]]
+
===Separation of Concern===
 +
https://en.wikipedia.org/wiki/Separation_of_concerns
  
 +
Keep you Moodle Object (logic)  classes and your UI Presentation classes separate. This will probably be very different from how you handled login in form in previous classes. We will try to keep all the Model login in the Model classes and UI Logic in the Form class. This will allow us to easily move the Model classes to a different UI like the Web or XAML.
  
Now here is an example of a Dog class that implements the IComparable inteface.
+
Events
 +
:events from a windows form or web page are handled by event handlers. Events are raised when a user interacts with interface elements and handled by the event handlers.
  
[http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class8/DogCompare/dogICompare.cs dogICompare.cs]
 
  
===Other Resources on Interfaces===
+
http://www.csharphelp.com/archives/archive253.html
  
[http://ia300218.us.archive.org/2/items/arsdigitac04n04/Lecture_04.html ArsDigita University Course 04: Object-oriented Program Design and Software Engineering - Lecture Notes 4]
+
===Examaple of event handlers and classes===
 +
http://iam.colum.edu/oop/MotorvehicleRace.zip
  
[http://ia300218.us.archive.org/2/items/arsdigitac04n05/Lecture_05.html ArsDigita University Course 04: Object-oriented Program Design and Software Engineering - Lecture Notes 5]
+
<syntaxhighlight lang="csharp">
 +
private void button1_Click(object sender, EventArgs e)
 +
        {
 +
            Console.WriteLine("button1 Clicked");
 +
            MessageBox.Show("button1 Clicked"); 
 +
        }
 +
</syntaxhighlight>
  
 +
Create a windows form with a button the uses your class.
  
 +
<syntaxhighlight lang="csharp">
 +
using System;
 +
using System.Collections.Generic;
 +
using System.ComponentModel;
 +
using System.Data;
 +
using System.Drawing;
 +
using System.Text;
 +
using System.Windows.Forms;
  
==Web Forms==
+
namespace WindowsDog
Examples of Web Forms
+
{
 +
    public partial class Form1 : Form
 +
    {
 +
        Dog fido;  //The form 'has a' dog
 +
       
 +
        public Form1()
 +
        {
 +
            InitializeComponent();
 +
            fido = new Dog();
 +
        }
  
http://iam.colum.edu/oop/classsource/class9/aspForms.aspx [http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class9/aspForms.aspx aspForms.aspx - Source]
+
        private void btnBark_Click(object sender, EventArgs e)
 +
        {
 +
            lblBark.Text = fido.Bark(); //UIEvents are delegated to the model class
 +
        }
  
'''todo''' examples of all the html elements and how they react to form submits
 
  
==Persisting Data==
+
       
 +
}
 +
</syntaxhighlight>
  
===POST and GET===
+
==XAML Example==
  
an asps page posting to itself
+
Timer in XAML
 +
https://msdn.microsoft.com/en-us/library/cc189084(v=vs.95).aspx
  
  
  
==Events in c#==
+
==Home Work==
 
 
Event handlers
 
 
 
OnClick
 
  
http://iam.colum.edu/oop/classsource/class9/events/events1.aspx
+
Create a windows form and port your classes. The form should have UI elements (buttons, dropdown, etc) that demonstrate the use of you classes.
[http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class9/events/events1.aspx events1.aspx - source]
 
  
OnCommand
+
Get Android Studio Installed
  
http://iam.colum.edu/oop/classsource/class9/events/events2.aspx
+
You wili need
[http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class9/events/events2.aspx events2.aspx - source]
+
*Java JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html I'm still using Java 7 Java 8 also should ve fine
 +
*Android Studio http://developer.android.com/sdk/installing/index.html?pkg=studio
  
http://iam.colum.edu/oop/classsource/class9/events/events3.aspx
 
[http://iam.colum.edu/oop/gbrowser.php?file=/classsource/class9/events/events3.aspx events3.aspx - source]
 
  
==Home Work==
+
Watch the Android-Studio-First-Look https://www.lynda.com/Android-tutorials/Welcome/143103/168098-4.html
  
Make an post an catch aspx page with a form of your very own that asks questions about one of your objects.
+
You should logon to Oasis http://oasis.colum.edu First then select the training tab. Then search for 'Android-Studio-First-Look'
Use regular html form and aspx events to demostrate you class.
 
  
 +
*Section 0 Introduction
 +
*Section 1 Getting Started
 +
*Section 2 Exploring the User Interface (fine to watch next week)
 +
*Section 3 Designing and Coding (fine to watch next week)
  
Use the form values to create a new instance of your class.
 
  
Get and read Intro and Chapter 1 of Head Start Design Patterns
+
https://www.lynda.com/Android-tutorials/Welcome/143103/168098-4.html

Latest revision as of 16:31, 10 June 2019


PolyMorphism

Using the least specific class to increase reuse.

Value vs Reference Types

int, float, string and most built in types are value types

defined classes are Reference types.

Review Coins

?'s

Review MotorVehicle

?'s

Motorvehicle Diagram

Oop Motorvehicle Diagram

http://iam.colum.edu/oop/browser/browser.aspx?f=/classsource/class7/MotorvehicleRace

Private instance data members - accessors

Microsoft has stared calling private variables with accessors Properties

Private class memebers the use get and set keyword to set and retrieve data. Get and set are known as accessor methods private members are helpful when you want to also do other things when a data member is changed or change the rutern value under certain conditions. C# Programmer's Reference - Accessors http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfaccessorspg.asp. Lastly accessor also make read only and write only variables possible

//private string color read/write
private string color;

public string Color
{
  get
  {
   return color;
  }
  set
  {
   color = value;
  }
}

//private string color read only
private string color;

public string Color
{
  get
  {
   return color;
  }
}


Another property that is a good candidate for a private instance data member is the dogs age

private string age;

public int Age
{
  //age can only be accessed with get there is no set accessor
  //age must be set with HappyBirthday()
  get
  {
   return age;
  }
}

public int HappyBirthday()
{
  age++;
  return age;
}

Windows forms

Separation of Concern

https://en.wikipedia.org/wiki/Separation_of_concerns

Keep you Moodle Object (logic) classes and your UI Presentation classes separate. This will probably be very different from how you handled login in form in previous classes. We will try to keep all the Model login in the Model classes and UI Logic in the Form class. This will allow us to easily move the Model classes to a different UI like the Web or XAML.

Events

events from a windows form or web page are handled by event handlers. Events are raised when a user interacts with interface elements and handled by the event handlers.


http://www.csharphelp.com/archives/archive253.html

Examaple of event handlers and classes

http://iam.colum.edu/oop/MotorvehicleRace.zip

private void button1_Click(object sender, EventArgs e)
        {
            Console.WriteLine("button1 Clicked");
            MessageBox.Show("button1 Clicked");   
        }

Create a windows form with a button the uses your class.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsDog
{
    public partial class Form1 : Form
    {
        Dog fido;  //The form 'has a' dog
        
        public Form1()
        {
            InitializeComponent();
            fido = new Dog();
        }

        private void btnBark_Click(object sender, EventArgs e)
        {
            lblBark.Text = fido.Bark(); //UIEvents are delegated to the model class
        }


        
}

XAML Example

Timer in XAML https://msdn.microsoft.com/en-us/library/cc189084(v=vs.95).aspx


Home Work

Create a windows form and port your classes. The form should have UI elements (buttons, dropdown, etc) that demonstrate the use of you classes.

Get Android Studio Installed

You wili need


Watch the Android-Studio-First-Look https://www.lynda.com/Android-tutorials/Welcome/143103/168098-4.html

You should logon to Oasis http://oasis.colum.edu First then select the training tab. Then search for 'Android-Studio-First-Look'

  • Section 0 Introduction
  • Section 1 Getting Started
  • Section 2 Exploring the User Interface (fine to watch next week)
  • Section 3 Designing and Coding (fine to watch next week)


https://www.lynda.com/Android-tutorials/Welcome/143103/168098-4.html