0% found this document useful (0 votes)
24 views26 pages

SAD - Ch9 Implementation

Uploaded by

longlph.23it
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views26 pages

SAD - Ch9 Implementation

Uploaded by

longlph.23it
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 26

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

You might also like