Object-Oriented Analysis and Design Introduction Tom Perkins
Pages: 634 Pub Date: November 2006 Publisher: O'Reilly by Brett McLaughlin, Gary Pollice, David West Head First Object-Oriented Analysis and Design Print ISBN-13: Print ISBN-10:
Head First Chapters 1.Great Software Begins Here 2.Gathering Requirements 3.Requirements Change 4.Analysis 5.Handling Change 1.Small Changes lead to Big Problems 2.Incorporating Flexibility 6.Software Architecture 7.Bringing Order to Chaos 8.Design Principles 9.Iterating and Testing 10.An OOAD Software Process
Obstacles Not the “perfect” Introduction to Object Orientation book Examples in Java –Rework in VB.NET or C#.NET Approach too “Juvenile” –Maybe –Incorporates many different features drawn from learning theory and cognitive psychology Not a course for “object oriented gurus” Yet assumes some familiarity with object-oriented coding Major problem: Getting you involved!
Approach Stick close to the book As much code as possible Walkthru’s Get your hands dirty, become involved Do the book exercises Work with someone where possible Participate in class discussions Team Learning Experiments
Welcome to Objectville “Foist, youse gotta speak da language!”
Learning Objectives Be able to read and interpret a UML class diagram Be able to write a simple class in VB.NET or C#.Net Be able to write a class that inherits from another class, changes some behavior and adds some behavior to the base class Be able to define polymorphism Be able to identify what encapsulation is and why it is important
Points of Interest UML Inheritance set Polymorphism Encapsulation
UML and Class Diagrams Airplane speed: int getSpeed(): int setSpeed(int) Class Diagram Member Variables name:type Name Methods name(parameters the method uses): return type
Basic Airplane Class VB.NET Public Class Airplane Private mSpeed As Integer Sub New() End Sub Public Sub SetSpeed(ByVal value As Integer) mSpeed = value End Sub Public Function GetSpeed() As Integer Return mSpeed End Function End Class C#.NET using System; using System.Collections.Generic; using System.Text; namespace Objectville_Demo_CS { public class Airplane { private int speed; public Airplane(){ // constructor } public virtual void setSpeed(int speed) { this.speed = speed; } public virtual int getSpeed() { return speed; }
What doesn’t the Class Diagram give you? Variable scope – public, private, friend, etc –Full-blown UML does –Not usually needed Information about the constructor method for the class Details of what each method does
Inheritance Once class inherits behavior from another class Code keywords –VB: Inherits –C# uses : (colon) to indicate inheritance “Derived” class, subclass “Base” class, superclass (vb – MyBase)
Inheritance VB.NET Public Class Jet Inherits Airplane Private Const MULTIPLIER = 2 Public Sub New() MyBase.New() End Sub Public Overrides Sub SetSpeed(ByVal value As Integer) MyBase.SetSpeed(value * MULTIPLIER) End Sub Public Sub Accelerate() MyBase.SetSpeed(GetSpeed() * 2) End Sub End Class C#.NET public class Jet:Airplane { private const int MULTIPLIER = 2; public Jet() : base() { } public override void setSpeed(int speed) { base.setSpeed(speed * MULTIPLIER); } public void accelerate() { base.setSpeed(getSpeed() * 2); }
Base Class Modifications (.NET) Public Class Airplane Private mSpeed As Integer Sub New() End Sub Public Overridable Sub SetSpeed( ByVal value As Integer) mSpeed = value End Sub Public Overridable Function GetSpeed() As Integer Return mSpeed End Function End Class public class Airplane { private int speed; public Airplane() // constructor { } public virtual void setSpeed(int speed) { this.speed = speed; } public virtual int getSpeed() { return speed; }
Putting the classes to work Start with a biplane Module Module1 Sub Main() FlyTest() End Sub Public Sub FlyTest() Dim biplane As New Airplane biplane.SetSpeed(212) Console.WriteLine( _ biplane.GetSpeed()) Console.Read() End Sub End Module static void Main(string[] args) { FlyTest1(); } public static void FlyTest1() { Airplane biplane = new Airplane(); biplane.setSpeed(212); Console.WriteLine(biplane.getSpeed()); Console.ReadLine(); }
Module Module1 ‘Puzzle 1 (VB) Sub Main() FlyTest() End Sub Public Sub FlyTest() Dim biplane As New Airplane biplane.SetSpeed(___) Console.WriteLine(_________________) Dim boeing As New Jet boeing.SetSpeed(___) Console.WriteLine(_________________) ______ While _______ ___________________ Console.WriteLine(________________) If (________________ > 5000) Then ________________(________________ * 2) Else _________________ End If _________ End While Console.WriteLine(biplane.GetSpeed) Console.Read() End Sub End Module 212 Dim x = 0 boeing.GetSpeed biplane.GetSpeed() biplane.SetSpeed boeing.GetSpeed biplane.Accelerate() biplane.GetSpeed 422 x < 5 x < 4 boeing.SetSpeed x = 0 x < 3 x = x boeing.Accelerate() x-- x = Code snippets: Desired output:
static void Main(string[] args) // puzzle 1 C# { FlyTest1(); } public static void FlyTest1() { Airplane biplane = new Airplane(); biplane.setSpeed(___); Console.WriteLine(____________); Jet boeing = new Jet(); boeing.setSpeed(___); Console.WriteLine(________________); _________; while (________) { _________________; Console.WriteLine(_____________________); if ( ______________ > 5000) { __________________(______________ * 2); } else { ______________________; } ___________; } Console.WriteLine(biplane.getSpeed()); Console.ReadLine(); } 212 boeing.getSpeed() biplane.getSpeed() 422 x = 0 int x = 0; x < 4 boeing.accelerate() biplane.setSpeed x-- x = 1 x < 3 boeing.getSpeed() boeing.accelerate() boeing.getSpeed() biplane.getSpeed() x x < 5 Code Snippets: Desired output:
Class Exercise 1 Divide into 2 groups –C# –VB Divide into “teams” of 3-4 Get the “proper” puzzle Place the code snippets into the blank lines in the code You can use the same snippet more than once There are some (“trick/decoy”) snippets that you won’t need. Goal: create a class that will produce the desired output.
DEMO “Walkthru” of solution
A “toonce” of Polymorphism Airplane speed: int getSpeed(): int setSpeed(int) Jet MULTIPLIER: int accelerate() “inherits from” Airplane plane = new Airplane(); Airplane plane = new Jet(); Airplane plane = new Rocket();
Encapsulation Escapades Hiding information from the rest of your application Hide the details within the object; use “Public” sparingly Demo – change the internal speed variable from “private” to “public” –Run FlyTest2 and FlyTest3
Rick’s Guitar Shop Application UML Class Diagrams Guitar serialNumber:string price: double builder:string type:string backWood:string topWood:string getSerialNumber():string getPrice():double setPrice():double getBuilder():double getModel():string getType():double getBackWood():string getTopWood():string Inventory Guitars: List addGuitar(string,double,string,string, string,string,string) getGuitar(string):Guitar search(Guitar):Guitar initializeInventory: printInventory()
Main Application Inv:Inventory g:Guitar whatErinLikes:Guitar initializeInventory(Inventory)
Demo Walkthru Rick’s Guitar Shop Application
Problems Search routine does not work Should use constants or enums instead of strings Search should return multiple guitars Architecture could use some restructuring What would you do first with Rick’s app?
Assignment If your’re new to object oriented programming, read Appendix ii: Welcome to Objectville Work through exercises in Chapter 1 Download Rick’s App from class site Modify it to: –Fix the search routine –Use enums instead of strings
FINIS