SYSTEMS
ANALYSIS AND DESIGN
Nguyen Thanh Binh, Nguyen Quang Vu, Le Viet Truong, Nguyen Thi
Hanh, Vo Van Luong, Le Thi Bich Tra
Faculty of Computer Science
Implementation
• Reminders of object-oriented programming
• From design to implementation
Object-oriented programming
• Functional/imperative programming
• C/Pascal
Data
Function 3
Function 1
Function 2
3
Object-oriented programming
• Object-oriented programming
• C++, Java, C#, … Data
Functions
message
message
Data Data
message Functions
Functions
• Encapsulation : class
• Attributes
• Methods
• Constructors et destructors
• Inheritance
• Abstract classes et interfaces
• Polymorphism
4
Object-oriented programming
class User {
public:
• Class : C++ User(string n, int a):name(n), age(a) {}
string getName() {return name;}
int getAge() const {return age;}
void setName(string n) {name = n;}
void setAge(int a) {age = a;}
void print() const ;
…
[private:]
string name;
int age;
};
void User::print() const {
cout << "name: " << name << " age: " << age << endl;
}
…
User u(" Nguyen Van A ", 35);
User* p = new User( " Nguyen Van A ", 35 );
…
delete p; 5
Object-oriented programming
class User {
• Class : Java public User(String n, int a) {name = n; age = a;}
public String getName() {return name;}
public int getAge() {return age;}
public void setName(String n) {name = n;}
public void setAge(int a) {age = a;}
public void print(){
System.out.println( "name: " + name + " age: " + age );
}
…
private String name;
private int age;
}
…
User u = new User (“Nguyen Van A", 35 );
…
6
Object-oriented programming
• Constructor and Destructor: C++
• Constructor
• initialise attributes and then allocate memory for the attributes
• Destructor
• De-allocate the dynamic memory
• Mandatory: if there are pointer attributes and the memory allocations
Constructor
class TypeA {};
class ClassB {
TypeA* p;
public: ClassB(TypeA* q ) : p( new TypeA(*q) ) {}
~ClassB(){ delete p; }
};
Destructor
7
Object-oriented programming
• Constructor and destructor: Java
• There are constructors
• There are no destructor: The garbage collector is responsible for managing the
heap memory
New objects are allocated at the end of the used heap
GC roots are special objects referenced by the JVM.
Non reachable objects are garbaged-collected
8
Object-oriented programming
• Inheritance: C++
class StudentUser : public User {
public: StudentUser(string n, int a, string school) : User(n, a){
schoolEnrolled = school;
}
void print() {
User::print();
cout << "School Enrolled: " << schoolEnrolled << endl;
}
string schoolEnrolled;
};
class StudentUser : public User, public Student { … };
• Multiple inheritance: C++
9
Object-oriented programming
• Inheritance: Java
class StudentUser extends User {
public StudentUser( String n, int a, String school ) {
super(n, a);
schoolEnrolled = school;
}
public void print() {
super.print();
System.out.print( " School: " + schoolEnrolled );
}
private String schoolEnrolled;
}
10
Object-oriented programming
• Abstract classes and interfaces
• Java and C++ offer the abstract class concept
Abstract class
Shape
Circle Rectangle
• Additionally, Java offers the interface concept
• An interface is similar a class abstract: no object can be created
• An interface contains only the method declarations
11
Object-oriented programming
• Abstract class: C++
class Shape {
public:
virtual double area( ) = 0;
virtual double circumference() = 0;
....
}
• Abstract class: Java abstract class Shape {
abstract public double area( );
abstract public double circumference();
....
}
12
Object-oriented programming
• Java interface
interface MyInterface {
public double area( );
public double circumference();
…
}
class MyClass implements MyInterface {
// Implement the declared methods of MyInterface
}
• Multiple inheritance in Java
class MyClass extends SuperClass implements MyInterface1, MyInterface2 {
// Implement the declared methods of MyInterface1 and MyInterface2
}
13
Object-oriented programming
• Polymorphism in C++ class User {
string name;
int age;
public:
User(string nm, int a) {name=nm; age=a;}
virtual void print() {
cout << "Name: " << name << " Age: " << age;
}
};
class StudentUser : public User {
string schoolEnrolled;
public:
StudentUser(string name, int y, string school) : User(name, y) {
schoolEnrolled = school;
}
void print() {
User::print();
cout << " School Enrolled: " << schoolEnrolled;
}
}; 14
Object-oriented programming
• Polymorphism in C++
int main()
{
User* users[3];
users[0] = new User( "Buster Dandy", 34 );
users[1] = new StudentUser("Missy Showoff", 25, "Math");
users[2] = new User( "Mister Meister", 28 );
for (int i=0; i<3; i++)
{
users[i]->print();
cout << endl;
}
delete [] users;
return 0;
}
15
Object-oriented programming
class User {
• Polymorphism in Java public User( String str, int yy ) {
name = str;
age = yy;
}
public void print() {
System.out.print( "name: " + name + " age: " + age );
}
private String name;
private int age;
}
class StudentUser extends User {
public StudentUser( String nam, int y, String sch ) {
super(nam, y);
schoolEnrolled = sch;
}
public void print() {
super.print();
System.out.print( " School: " + schoolEnrolled );
}
private String schoolEnrolled;
16
Object-oriented programming
• Polymorphism in Java
class Test
{
public static void main( String[] args )
{
User[] users = new User [3];
users[0] = new User( "Buster Dandy", 34 );
users[1] = new StudentUser( "Missy Showoff",25,
"Math");
users[2] = new User( "Mister Meister", 28 );
for (int i=0; i<3; i++)
{
users [i].print();
System.out.println();
}
}
}
17
Main Activities of Software Development
Requirements
Analysis Design
Gathering
Define the conceptual Design the solution /
Define requirement
model software plan
specification
Implementation Integration and Test
Deployment
Code the system based on Prove that the system meets
Installation and training
the design the requirements
Maintenance
Post-install review
Support docs
Active support
18
From design to code
• Generation of source code from the design model
• Object-oriented code includes
• Definitions of classes and interfaces
• Definitions of methods
• The class diagrams are transformed to classes and interfaces
• The interaction diagrams are transformed to code of methods.
• Other diagrams allow to guide the programmer during coding
19
From design to code
• Class definition
• Example of a part of class diagram
orders OneOrder contains >
1..* *
1 quantity: Integer 1
ListOfOrders AirPlane
datePlaced + subtotal() : double price : float
clientID
+ total() : double + getPrice() : float
20
From design to code
• Class definition
• Code of OneOrder class
OneOrder public class OneOrder
{
quantity: Integer public double subTotal()
{
+ subtotal() : double
}
private int quantity;
}
21
From design to code
• Class definition
• Code of OneOrder class
OneOrder contains >
* public class OneOrder
quantity: Integer 1 {
AirPlane public double subTotal()
+ subtotal() : double {
price : float
}
+ getPrice() : float private int quantity;
private AirPlane airPlane;
}
If the role of an association is not explicit, the created attribute
takes the associated role.
22
From design to code
• Definition of classes
• Code of ListOfOrders class
orders OneOrder
1..* public class ListOfOrder
1 quantity: Integer {
ListOfOrders public double total()
datePlaced + subtotal() : double {
clientID
}
+ total() : double private Date datePlaced;
private int clientID;
private List orders;
}
23
From design to code
• Method definition
• Interaction diagram defines the getTotal() method
1 : getTotal() 2 : *[for each] getSubtotal()
:ListOfOrders :OneOrder
public double getPrice() public float getPrice()
{ { 3 : getPrice()
return price;
return (quantity * airPlane.getPrice());
} }
public double getTotal()
public double getTotal() :AirPlane
{ {
double sum = 0;
} for (int i=0; i<orders.size(); i++)
sum +=
orders.elementAt(i).getSubtotal();
return sum;
}
24
From design to code
• Implementation order
• Class must be implemented from the least coupled/dependent to the most
coupled/dependent
7 4 3
1 1
Store ProductCatalog ProductDescription
1..*
1 1
1..*
6 2
CashRegister 1..* LineItem
1
* 5
Sale
* 1
1
1 Payment
25
From design to code
• Several UML tools
• Rational Rose, Dia ULM, Piosedon for UML, Umbrello, Power Design, Dia,
StarUML
• Draw UML diagrams
• Automatically generate source code: Java, C++, C#, …
• Automatically source code generation
• Imperfect
• Only the skeleton
26