Post on 08-Jan-2016
description
Software EngineeringImplementation
Lecture 3
ASPI8-4
Anders P. Ravn, Feb 2004
Overview• Summary – Documents, Domains
• Module Specification - Java1. Class, object (variable)
2. Generalization
3. Association
4. Dependency
5. Interface
6. Package
7. Active Class Task (thread)
Documents -51.1. Requirements SpecificationRequirements Specification
1.1 System Definition1.1 System Definition
1.2 Problem Domain Structure1.2 Problem Domain Structure
1.3 Application Domain Structure
1.3.1 Use Cases
1.3.2 Functions
1.3.3 Interfaces
1.4 Acceptance Test Specification
2. Architecture
2.1 Criteria
2.X Module Interfaces
2.T Integration Test Specification
Documents -6!
1. Requirements Specification
2. Architecture
3. Modules
4. Implementation
5. Test
Activities: application domain analysis
Usage
Functions
Systemdefinition
and ProblemDomainmodels
Interfaces
ApplicationDomainModel
andSoftware
Requirements
Design
Problem Domain Application Domain
Model
Model*
Use case Actor
InterfaceSystem
Class and Object
Class name
attributes
methods
Object: Class
1 *
Java class class C {
public boolean b;
protected char c;
private byte i8; C cl;
public int method(int x, C y)
{if (b) return y.method(7,c1);
else return i8; }
public C(long count)
{if (count > 0)
c1=new C(count-1); }
}
Java variables/objects
boolean b;
character c;
byte i8; short i16; int i32; long i64;
float ieee32f; double ieee64f;
C xx = new C(5);
int[] ia = new int[250];
C[] ca = new C[10];
ca[0] = new C(ia[249]);
Java class class C {
public boolean b;
protected char c;
private byte i8; C cl;
public C(long count)
{if (count > 0)
c1=new C(count-1); }
public int method(int x, C y)
{if (b) return y.method(7,c1);
else return i8; }
}
Moduleclass M {
public bool b; ...
public int method(int x, C y)
{if(b)return ...;}
public M(boolean b)
{ super(); this.b = b;}
public M() {this(false);}
}; ...
M module1= new M(true), module2= new M();
Module Specification
abstract class MSpec {
public boolean b;
abstract int method(int x, C y);
}
Module Implementationclass M extends Mspec {
private byte i8; int i16; ...
public int method(int x, C y)
{if(b)return ...;}
public M(boolean b)
{ super(); this.b = b;}
public M() {this(false);}
};...
M module1= new M(true), module2= new M();
Generalization
Superclass
Subclass
Java extends
class superclass {
...
};
class subclass extends superclass {
...
}
Cluster (package)
related classes
<<cluster>> name
Java package
package driverspec; source1
abstract class DSpec{ ... };
...
source2
package drivers
import driverspec.*;
public class D extends DSpec {...};
...
Aggregation
the whole
the parts
[arity]
aggregation – by inclusionabstract class WholeSpec {
protected P1 p1; P2 p2;
Ps[] p;
};
...
class Whole extends WholeSpec {
public Whole(int p_arity)
{p1= new P1(); p2= new P2();
p = new Ps[p_arity]; ...}
}
aggregation – by referenceabstract class WholeSpec {
protected P1 p1; P2 p2;
Ps[] p;
};
...
class Whole extends WholeSpec {
public Whole(P1 p1, P2 p2, Ps[] p)
{this.p1= p1; this.p2= p2;
p = new Ps[p.length]; ...}
}
Association
[name]A B
[arity] [arity]
association – by referenceclass ASpec {
protected B b;
};...
class A extends ASpec {
public A(B b) {this.b = b;}
public void setb(B b) {this.b = b;}
}...
A a; B b;
a = new A(nil); b = new B(a); a.setb(b);
Interface Class and Dependency
IRow
Image Hydraulics
use
<<interface>>IRow
userealise
Java interface
interface IRow {
// methods only !
}
class Image implements IRow {
...
}
IRow
Image
realize
Start and Parameters
class System {
public static final int MAX = 10;
public static int ACTUAL;
public static void main(String[] args)
{ int a = Integer.parseInt(args[0]);
if (a > MAX || a < 0) a = MAX;
ACTUAL = a;}
}
Exceptions
class BadData extends Exception {
BadData(String s)
{super(”Bad data”+s+”\n”);}
};
class Reader {
public void read(Data d) throws BadData
{ ... throw new BadData(”!!!”); ...}
}
Exception Handlers
public void someMethod()
{ Data x;
Reader r = new Reader();
try { r.read(x); ...
} catch (BadData b) { ...
...
} finally { ... }
}
Maintaining Documentation
• Documentation comments
• Libraries
• Module test
• Applets
• API, Swing
C++ class C {
public boolean b;
protected char c;
private byte i8; C *cl;
public C(long count)
{if (count > 0)
c1=new C(count-1); }
public int method(int x, C *y)
{if (b) return y->method(7,c1);
else return i8; }
}