Title: Object-Oriented Analysis and Design
1Object-Oriented Analysis and Design
2- 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
3Head 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
4Obstacles
- 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!
5Approach
- Stick close to the book
- As much code as possible
- Walkthrus
- Get your hands dirty, become involved
- Do the book exercises
- Work with someone where possible
- Participate in class discussions
- Team Learning Experiments
6Welcome to Objectville
- Foist, youse gotta speak da language!
7Learning 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
8Points of Interest
set
set
set
set
set
Inheritance
UML
Polymorphism
Encapsulation
9UML and Class Diagrams
Class Diagram
Name
Member Variables nametype
Methods name(parameters the method uses) return
type
10Basic Airplane Class
C.NET using System using System.Collections.Gene
ric 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 Public
Sub SetSpeed(ByVal value As Integer)
mSpeed value End Sub Public Function
GetSpeed() As Integer Return mSpeed
End Function End Class
11What doesnt 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
12Inheritance
- 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)
13Inheritance
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 JetAirplane
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)
14Base 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
15Putting 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.Re
adLine()
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
16Module 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 (________________ gt 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.GetSp
eed() biplane.SetSpeed boeing.GetSpeed
biplane.Accelerate() biplane.GetSpeed 422 x lt
5 x lt 4 boeing.SetSpeed x 0 x lt 3 x x 1
424 boeing.Accelerate() x-- x 1
Desired output
212 844 1688 6752 13504 27008 1696
17 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 ( ______________ gt 5000)
__________________(__
____________ 2)
else
______________________
___________
Console.WriteLine(biplane.getSpeed())
Console.ReadLine()
Code Snippets
212 boeing.getSpeed() biplane.getSpeed() 422
x 0 int x 0 x lt 4 boeing.accelerate()
biplane.setSpeed x-- x 1 x lt
3 boeing.getSpeed() boeing.accelerate()
boeing.getSpeed() biplane.getSpeed() x 424
x lt 5
Desired output
212 844 1688 6752 13504 27008 1696
18Class 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
wont need. - Goal create a class that will produce the
desired output.
19DEMO
20A toonce of Polymorphism
inherits from
Airplane plane new Airplane()
Airplane plane new Airplane() Airplane plane
new Jet() Airplane plane new Rocket()
21Encapsulation 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
22Ricks Guitar Shop ApplicationUML Class Diagrams
Guitar
Inventory
serialNumberstring price double
builderstring typestring backWoodstring
topWoodstring
Guitars List
addGuitar(string,double,string,string, string,str
ing,string) getGuitar(string)Guitar
search(Guitar)Guitar initializeInventory printIn
ventory()
getSerialNumber()string getPrice()double setPric
e()double getBuilder()double getModel()string g
etType()double getBackWood()string getTopWood()
string
23Main Application
InvInventory gGuitar whatErinLikesGuitar
initializeInventory(Inventory)
24Demo
- Walkthru Ricks Guitar Shop Application
25Problems
- 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 Ricks app?
26Assignment
- If yourre new to object oriented programming,
read Appendix ii Welcome to Objectville - Work through exercises in Chapter 1
- Download Ricks App from class site
- Modify it to
- Fix the search routine
- Use enums instead of strings
27FINIS