티스토리 뷰

ooad

Object Oriented Model

dictee 2019. 4. 27. 01:05

※ tutorialspoint의 OOAD 요약 (https://www.tutorialspoints.com/object_oriented_analysis_design/)

Objects and Classes

Object

object는 물리적 또는 개념적으로 존재할 수 있는 object oriented 환경에서의 real-world element

  • ID: 시스템 내에서 다른 object와 구분
  • State: object의 property, property value 결정
  • Behavior: state change 관점에서 수행되는 activity

application의 needs에 따라 모델링

object는 고객, 자동차와 같은 물리적 존재 또는 project, process와 같은 개념적 존재

Class

class는 공통의 property를 갖는 object들의 집합

class의 멤버로서 object를 생성하는 것을 instantiation (즉, object는 class의 instance)

class 구성 요소

  • class에서 instantiation되는 object attribute의 집합. 일반적으로, class의 각각의 object는 attribute value가 다름. attribute는 class data
  • class의 object의 behavior를 기술하는 operation set. operation은 function 또는 method

Example

Circle class: 2차원 좌표값으로 표현하는 원

attribute

  • x-coord: 원 중앙의 x 좌표값
  • y-coord: 원 중앙의 y 좌표값
  • a: 반지름

operation

  • findArea(): 면적 계산
  • findCircumference(): 둘레 계산
  • scale(): 반지름 값 증가 또는 감소

instantiation 중 최소한의 attribute에 값 저장

object my_circle을 생성할 때, x-coord: 2, y-coord: 3, a: 4라고 할 수 있다. scale() 통해 2배 커지도록 한다면 a는 8이 된다. operation은 my_circle object의 state 변화를 야기한다. 즉, object의 특정 behavior를 나타낸다.

Encapsulation and Data Hiding

Encapsulation

class내의 attribute, method를 binding하는 과정

encapsulation을 통해 class의 내부 정보를 외부로부터 숨길 수 있다

외부에서는 class가 제공하는 interface만을 통해서 class element를 access할 수 있게 한다

Data Hiding

class는 data (attribute) 는 class method로만 access 되고, 외부로부터는 격리되도록 설계

이러한 object data의 격리 과정을 data (information) hiding

Example

Circle class: data hiding은 외부로부터 attribute가 보이지 않도록 한다. class data access를 위하여 2개의 추가 method 제공하도록 구성

  • setValues(): x-coord, y-coord, a 값 설정 method
  • getValues(): x-coord, y-coord, a 값 읽기 method

object my_circle의 private data는 class Circle에 encapsulation되어 있지 않은 method로는 direct access를 할 수 없다

대신, setValues(), getValues() method를 통해 access 해야 한다

Message Passing

applicatoin은 조화롭게 interaction을 하는 object들이 필요. system의 object는 message passing을 통하여 커뮤니케이션. system이 2개의 object를 갖는다고 하면, obj1, obj2. obj1이 obj2의 method를 실행하고자 할 경우, obj1은 obj2에게 message를 보낸다.

message passing feature

  • 2개 object간의 message passing은 unidirectional
  • message passing은 object간의 interaction을 가능하게 한다
  • message passing은 class method를 호출하는 것을 포함
  • 서로 다른 process의 object는 message passing과 관련될 수 있다

Inheritance

새로운 class를 기존 class에서 기능 확장, 수정을 통하여 만들 수 있는 방법. 기존 class는 base class / parent class / super class 등으로 불리고, 새로운 class는 derived class / child class / subclass 등으로 불린다. subclass는 super class가 허용하는 경우, super class의 attribute, method를 상속받는다. subclass는 자신의 attribute, method를 추가하고,  super class의 method를 수정할 수 있다. Inheritance는 "is-a" 관계.

Example

Mammel class: Human, Cat, Dog, Cow 등 다양한 class 생성 가능. (모두 포유류의 특징이 있으므로) 또한 각각은 고유의 특징이 있다. a cow "is-a" mammel.

Types of Inheritance

  • single inheritance: 1개의 super class로부터 파생된 subclass
  • multiple inheritance: 1개 이상의 super class로부터 파생된 subclass
  • multilevel inheritance: subclass는 다른 class를 파생할 수 있다
  • hierarchical inheritance: class는 여러개의 subclass를 가질 수 있고, 각각은 또한 subclass를 가질 수 있다
  • hybrid ineritance: multiple inheritance와 multilevel inheritance의 조합

Polymorphism

instance에 따라 다른 operation을 사용하는 것을 의미. 다른 internal structure를 갖는 object들이 공통의 외부용 interface를 갖게 한다. inheritance 구현 시 효과적.

Example

class Circle, class Square: 각각은 findArea() method 가짐. class 내에서 이름, 목적은 같지만, 내부 구현 (즉, 각 class의 면적 계산 과정) 은 다름. Circle class의 object가 findArea() method를 호출하여, 원의 면적을 구하는 과정은 Square class의 findArea() method와 충돌하지 않음.

Generalization and Specialization

subclass가 superclass로부터 상속받는 class간의 hierarchy를 나타냄

Generalization

class들의 공통 특징은 상위 레벨의 하나의 class로 묶을 수 있다. 즉, subclass들은 일반화된 super class로 묶을 수 있다. 이것은 "is-a-kine-of" 관계. 예를 들어, "car is a kind of land vehicle", "ship is a kind of water vehicle"

Specialization

generalization의 반대 과정. object간의 서로를 구분하는 특징은 기존 class에서 새로운 class를 만드는 데 사용. 즉, subclass는 super class의 specialized version.

Links and Association

Link

link는 object와 다른 object 간의 연결을 의미. link를 통해, object는 method를 호출하거나 다른 object를 탐색. link는 2개 이상의 object간의 관계.

Association

공통 structure, behavior를 갖는 link들의 그룹. 1개 이상의 class들의 object간의 관계. link는 association의 instant로 정의 가능.

Degree of an Association

  • unary relationship: 동일 class의 object간의 연결
  • binary relationship: 2개 class의 object간의 연결
  • tenary relationship: 3개 이상 class의 object간의 연결

Cardinality Ratios of Associations

association과 관련된 instance의 개수

  • one to one: A class의 1개 object는 B class의 1개 object와 연결
  • one to many: A class의 1개 object는 B class의 여러개의 object와 연결
  • many to many: A class의 1개 object는 B class의 여러개의 object와 연결, B class의 1개 object는 A class의 여러개의 object와 연결

Aggregation or Composition

class는 다른 여러개의 class의 object들의 집합으로 만들 수 있다는, class간의 관계. object가 다른 class의 본문 내에 직접 배치 가능. "part-of" 또는 "has-a" 관계. aggregate object는 1개 이상의 다른 object로 구성된 object. 

Example

"a car has-a motor" 또는 "motor is a part of the car"

  • physical containment: 컴퓨터는 monitor, CPU, 마우스, 키보드 등으로 구성
  • conceptual containment: 주주는 주식을 보유

Benefist of Object Model

  • 빠른 소프트웨어 개발

  • 상대적으로 쉬운 유지보수 (특정 모듈에서 에러 발생 시, 다른 모듈이 계속 동작 중에도, 특정 모듈만 수정하는 것이 가능)

  • 상대적으로 부담이 적은 업그레이드
  • object, design, function의 재사용
  • 복잡한 시스템들의 integraton과 같은, risk 감소
댓글