250 likes | 596 Views
Object-Oriented Analysis and Design. Introduction Tom Perkins. Head First Object-Oriented Analysis and Design. by Brett McLaughlin, Gary Pollice, David West. Publisher: O'Reilly. Pub Date: November 2006. Print ISBN-10: 0-596-00867-8. Print ISBN-13: 978-0-59-600867-3. Pages: 634.
E N D
Object-Oriented Analysis and Design Introduction Tom Perkins
Head First Object-Oriented Analysis and Design by Brett McLaughlin, Gary Pollice, David West Publisher: O'Reilly Pub Date: November 2006 Print ISBN-10: 0-596-00867-8 Print ISBN-13: 978-0-59-600867-3 Pages: 634
Head First Chapters • Great Software Begins Here • Gathering Requirements • Requirements Change • Analysis • Handling Change • Small Changes lead to Big Problems • Incorporating Flexibility • Software Architecture • Bringing Order to Chaos • Design Principles • Iterating and Testing • 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
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 set set set set set Inheritance UML Polymorphism Encapsulation
Airplane speed: int getSpeed(): int setSpeed(int) UML and Class Diagrams Class Diagram Name Member Variables name:type Methods name(parameters the method uses): return type
Basic Airplane 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; } } } VB.NET Public Class Airplane Private mSpeed As Integer Sub New() End Sub PublicSub SetSpeed(ByVal value As Integer) mSpeed = value End Sub Public Function GetSpeed() As Integer Return mSpeed End Function End Class
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 OverridableFunction 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 virtualint getSpeed() { return speed; } }
Putting the classes to workStart with a biplane 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 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
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 Code snippets: 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 + 1 424 boeing.Accelerate() x-- x = 1 Desired output: 212 844 1688 6752 13504 27008 1696
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(); } Code Snippets: 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++ 424 x < 5 Desired output: 212 844 1688 6752 13504 27008 1696
DEMO “Walkthru” of solution
Airplane Jet speed: int MULTIPLIER: int getSpeed(): int setSpeed(int) accelerate() A “toonce” of Polymorphism “inherits from” Airplane plane = new Airplane(); 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 ApplicationUML Class Diagrams Guitar Inventory serialNumber:string price: double builder:string type:string backWood:string topWood:string Guitars: List addGuitar(string,double,string,string, string,string,string) getGuitar(string):Guitar search(Guitar):Guitar initializeInventory: printInventory() getSerialNumber():string getPrice():double setPrice():double getBuilder():double getModel():string getType():double getBackWood():string getTopWood():string
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