LECTURE 13 설계와코딩 최은만, CSE 4039 소프트웨어공학
설계구현매핑 UML 설계도로부터 Java 프로그래밍언어로의매핑과정설명 정적다이어그램의구현 동적다이어그램의구현 최은만, CSE 4039 소프트웨어공학 2
속성과오퍼레이션의구현 Student - name : String #d department t: String Sti packageattribute : long + addschedule (theschedule: Schedule, forsemester: Semester) + hasprerequisites(forcourseoffering: CourseOffering) : boolean # passed(thecourseoffering: CourseOffering) : boolean + 는 public, -는 private, # 은 protected Public boolean은 true, false 리턴 메소드바디는빈칸 public class Student private String name; protected String department; long packageattribute; public void addschedule (Schedule theschedule; Semester forsemester) public boolean hasprerequisites(courseoffering forcourseoffering) protected boolean passed(courseoffering 최은만, thecourseoffering) CSE 4039 소프트웨어공학 3
클래스변수와오퍼레이션 class Student Student - nextavailid : int = 1 private static int nextavailid = 1; + getnextavaiiid() : int public static int getnextavaiiid() Staticti 으로선언되어야할클래스변수와클래스오퍼레이션은클래스에속하는어떤다른객체에서도접근가능 인스턴스변수는클래스의객체가생성될때객체마다생성되나 Static 으로선언한클래스변수와오퍼레이션은클래스수준의정의 최은만, CSE 4039 소프트웨어공학 4
유틸리티클래스 전역변수와오퍼레이션의그루핑 인스턴스로만들지않아야함. 따라서 Static 클래스안의여러메소드를외부에서호출할것임 ( 따라서 static) Static 선언은메소드가객체이름이아니라클래스이름으로호출됨 <<utility>> MathPack -randomseed : long = 0 -pi : double = 3.14159265358979 +sin (angle : double) : double +cos (angle : double) : double +random() : double void somefunction()... mycos = MathPack.cos(90.0);... import java.lang.math; import java.util.random; class MathPack private static randomseed long = 0; private final static double pi = 3.14159265358979; public static double sin(double angle) return Math.sin(angle); static double cos(double angle) return Math.cos(angle); static double random() return new 최은만, CSE 4039 소프트웨어공학Random(seed).nextDouble(); 5
상속 User +email:string +notify(msg:string) LeagueOwner +maxnumleagues:int public class User private String email; public String getemail() return email; public void setemail(string value) email = value; public void notify(string msg) //... /* Other methods omitted */ public class LeagueOwner extends User private int maxnumleagues; public int getmaxnumleagues() 최은만, CSE 4039 소프트웨어공학 return maxnumleagues; public void setmaxnumleagues (int value) maxnumleagues = value; /* Other methods omitted */ 6
연관관계 양방향연관 두클래스가같은패키지안에있어야 양방향은두클래스가서로상대편객체를알고있어야하므로서로를알기위한 public 메소드와 private 변수가있어야 // no need to import if in same package Schedule class Schedule public Schedule() //constructor private Student thestudent; Student class Student t public Student() private Schedule theschedule; 최은만, CSE 4039 소프트웨어공학 7
방향성연관 단방향연관 Student t 객체가 Schedule e 객체를알아야. Student t 객체는 Schedule 객체의클라이언트 다른클래스의객체를만들수있어야 Schedule class Schedule public Schedule() Student class Student public Student() private Schedule theschedule; 최은만, CSE 4039 소프트웨어공학 8
연관 Role class Professor Professor instructor public Professor() private CourseOffering thecourseoffering; CourseOffering class CourseOffering public CourseOffering() private Professor instructor; Role 의추가 - 각클래스가다른클래스에대하여알고있어야 CourseOffering 클래스는 public 메소드 CourseOffering() 가있어야하며 private 타입의 Professor 객체를가지고있어야 Professor 클래스는 public 메소드 Professor() 와 private 타입의 CourseOffering 객체를알고있어야함 최은만, CSE 4039 소프트웨어공학 9
CourseOffering 0..4 primarycourses 연관다중도 class CourseOffering public CourseOffering() class Schedule public Schedule() private CourseOffering[] primarycourses = Schedule new CourseOffering[4]; public getcourseoffering() return primerycourse.element(); 다중도의구현 public addcourseoffering(courseoffering c) primarycourse.add(c); CourseOffering 클래스는 public method CourseOffering() 을 가짐 클래스 Schedule에는네개의 CourseOffering 객체를가질수있는배열또는리스트가있어야함 최은만, CSE 4039 소프트웨어공학 10
재귀연관 prerequisites 0.. * import java.util.vector; Course class Course public Course() // The unbounded multiple association // is stored in a vector private Vector prerequisites; 클래스 Course는자기자신에속하는객체와연관 Vector 는 java.util 에있는클래스로객체의배열을관리 Vector 타입의객체에는 copyinto, elementat, contains, insertelementat, addelement 등의메소드적용 최은만, CSE 4039 소프트웨어공학 11
집합관계 Schedule 0..* class Schedule public Schedule() private Student thestudent; import java.util.vector; 1 class Student t Student public Student() private Vector theschedule; Student 클래스는 Vector 리스트타입의클래스를선언 집합을위한생성자는따로없음. 객체의배열로취급 집합관계의구현은연관관계와차이가없음 최은만, CSE 4039 소프트웨어공학 12
합성관계 Schedule 0..* class Schedule 이부분은집합관 public Schedule() 계와동일 private Student thestudent; import java.util.vector; 1 class Student t Student public Student() private Vector theschedule = new Vector(); Java는 containment by value 지원하지않음 theschedule 클래스는 Student 클래스가생성 최은만, CSE 4039 소프트웨어공학 13
Interface, Realize 관계 <<Interface>> Serializable interface Serializable <<entity>> Schedule class Schedule implements Serializable UML 의 realize 관계와매칭되는 implement 구문이있음 Java 클래스는여러개의인터페이스를구현할수도있음 Java 의경우속성을정의할수도있음 최은만, CSE 4039 소프트웨어공학 14
다중상속 overlapping Land Vehicle <<realize>> <<Interface>> IVehicle <<realize>> <<Interface>> IWaterVehicle Amphibious Vehicle... interface IWaterVehicle : extends IVehicle... class AmphibiousVehicle extends LandVehicle implements WaterVehicle Java 는단일상속만허용. 하지만다중인터페이스의구현으로같은효과를낼수있음 최은만, CSE 4039 소프트웨어공학 15
추상클래스 Animal abstract +talk() abstract abstract class Animal public abstract void talk(); class Tiger extends Animal Lion Tiger public Tiger() +talk() +talk() public void talk() 추상클래스는인스턴스가만들어지지않는클래스 최은만, CSE 4039 소프트웨어공학 16
파라미터클래스 Tn:int T, Set insert(t) remove(t) template <T, n> class Set Vector T[100]; public insert(t const &d); punlic remove(t const &d); <<bind>> <float, 100> mysetoffloats Set<float, 100> mysetoffloats; Java 는파라미터클래스를지원하지않음 최은만, CSE 4039 소프트웨어공학 17
패키지 Package package com.abc.library; class ClassA. 패키지는관련있는클래스또는인터페이스들을그루핑한것 서브시스템이될수있음 클래스들을효율적으로관리하기위함 계층적구조 패키지안에선언된다른클래스는 import 하지않아도사용가능 최은만, CSE 4039 소프트웨어공학 18
서브시스템 ICourseCatalog <<subsystem>> CourseCatalog getcourseofferings() : CourseOfferingList package CourseCatalog; public interface ICourseCatalog public CourseOfferingList getcourseofferings(); 파일안에는 public class 한개만가능 최상위클래스는한개 파일이름은이클래스의이름과같게 UML 에서서브시스템과인터페이스관계는 n대n Java는 1대 1 최은만, CSE 4039 소프트웨어공학 19
액티비티다이어그램의구현 액티비티나프로시저안에서수행되어야할액션들의순서를나타냄 제어객체나서브시스템의알고리즘이나제어흐름을나타냄 두가지구현방법 프로그램의위치, 즉프로그램의제어문, 반복문으로액티비티다이어그램의제어흐름을구현하는방법 제어흐름을상태머신으로구현하는방법 최은만, CSE 4039 소프트웨어공학 20
액티비티다이어그램의구현 액티비티다이어그램을코딩하는일반적인규칙 액션상태는메소드호출이나일반계산문장으로구현 제어노드는 if-then-else 문장으로구현 병렬노드는스레드로구현 반복구조는 while 루프로구현 최은만, CSE 4039 소프트웨어공학 21
액티비티다이어그램의구현 최은만, CSE 4039 소프트웨어공학 22
액티비티다이어그램의구현 while (true) amount = 0.0; 0 while (amount < price) wait for a coin; add coin value to amount; show all available soft drink; while (selection is not done) wait for selection from user; if selection is eject coins dispense coins; set selection to done ; else if selection is a valid soft drink dispense change & soft drink concurrently; set selection to done Action 은메소드호출, 분기노드는 if, 포크노드는 thread 로코딩 최은만, CSE 4039 소프트웨어공학 23
상태다이어그램의구현 Inactive 객체의상태다이어그램을구현하는방법 상태다이어그램을클래스로매핑 상태정보를저장하기위한속성추가 이벤트는메소드로상태변화나이벤트의액션은메소드안에탑재 최은만, CSE 4039 소프트웨어공학 24
상태다이어그램의구현 모든상태는상태를나타내는속성의값 상태변화는클래스의메소드 가드는메소드안의조건체크 public void event_n(.) switch (state) case state_k: if (guard_condition_w) state = state_m; perform actions of the transition; break; case state_ v: 최은만, CSE 4039 소프트웨어공학 25
자판기제어객체 상태다이어그램을하나의클래스로구현 상태정보를저장하는 _state 속성추가 class VendingMachineControl int _state; ae; float _amount, _price; static final int WaitingCoin = 1; static ti final int WaitingSelection = 2; static final int DispensingSoftDrink = 3; static final int DispensingChange = 4; static final int EjectingCoins = 5; 최은만, CSE 4039 소프트웨어공학 26
상태초기화 생성자안에서상태변수및기타변수초기화 public VendingMachineControl(float price) _amount = 0; _state = WaitingCoin; _price = price; 최은만, CSE 4039 소프트웨어공학 27
이벤트는메소드로 상태천이와이벤트의액션은메소드안에구현 public void insertedcoin(float coinvalue) if (state == WaitingCoin) amount += coinvalue; if (amount >= price) // fire transition state = WaitingSelection; show available soft drinks; // insertedcoin 최은만, CSE 4039 소프트웨어공학 28
순서다이어그램 순서다이어그램은협력하는객체들사이의메시지교환을나타낸것 메시지는화살표나가는객체에서들어오는객체로메소드호출 메시지를받는객체는제 3 의객체에게하나이상의메시지를호출할수있음 최은만, CSE 4039 소프트웨어공학 29
순서다이어그램의구현 순서다이어그램을코딩하는방법 메시지는메소드의호출로코딩. 객체의생성은생성자 (constructor) t 를호출 메시지를받는객체의클래스안에메소드구현 분기구조는 if-else 문장과같은조건문으로구현 병렬구조는 thread 로구현 최은만, CSE 4039 소프트웨어공학 30
순서다이어그램의구현 메시지가호출당하는클래스안에메소드구현 ClassB ClassC o3; ClassD o4; method1( ) o3.method2(..); o4.method3(..); 최은만, CSE 4039 소프트웨어공학 31