Post

01. Object-Oriendted

OOP/OOAD/UML에 대해 알아보자

01. Object-Oriendted

OT

  • 총 3개의 파트를 다를 예정(OOP, OOAD, UML)
  • OO(Object Orineted) C++/Java에 대한 개발 방법론을 배울 예정
  • 소프트웨어 공학론을 Part1에서 배움
  • 최종적으로 소프트웨어 공학론 OO UP(Unified Process) 기반 iterative OOAD 방법론을 Part3 에서 최종적으로 배울 예정이며, 이를 위한 UML을 Part2 에서 배울 예정

OOP

  • C++, Javascript Language를 활용해서 Object가 무엇이고 Object Oriented(OO)가 무엇인지 배움
  • OO : 디자인 철학 Composition/ Encapsulation을 배움
  • OOD : 배운것들로 개발에 어떻게 적용는지 개발 방법론 학습

UML

  • OOA / OOD를 수행하기 전에 설계 도구를 배움 (13가지 다이어그램을 다 배움)

OOAD

  • 분석 및 개발 수행 + 교안은 APPLYING UML AND PATTERNS : OOAD 수업때 사용
  1. Object-Oriented Programming
    • 1.1 Object-Oriented
    • 1.2 Object-Oriented Pricipal
    • 1.3 Object-Oriented Development

UML(Unified Model Language)

    1. An Introduction to UML
  • 2.1 Use Case Diagram
  • 2.2 Class Diagram / Sequence Diagram
  • 2.3 Statechart Diagram / Activity Diagram / Component Diagram

Object-Oriented Analysis and Design

    1. Introduction
  • 3.1 Inception
  • 3.2 Elaboration
  • 3.3 OOAD Summary

Chapter 1. OOP(Object-Oriented Programming)

1.1.1 Ojbect Define

  • Object란 SW에서만 쓰이는게 아니라 포괄적인 의미로 여러 분야에서 사용됨

  • 여러 분야에서 실재단위(entity)로 쓰이나 우리의 주요 Focus는 SW 실재 단위다

  • (Informal한 용어로) oject들을 구성하여 Class를 만로 구성될수 있음

  • SW 관점에서 Object를 아래와 같은 요소를 다 가지고 있는 것을 말함
    • State(Attribute)
    • Behavior(Operation, Function, Method)
    • 명확한 Boundary
    • 고유한 Identity(ID)

      정리하면, State와 behavior를 캡슐화해서 내부적으로 명확한 바운더리를 가지고 고유한 ID를 가진 개체 (PPT에 나와있는 그림을 연상시켜라!)

  • 예를 들어 유 교수님을 빗대어 말하면 6가지 정보에 대한 state(Attribute)가 있고, 이를 접근하기 위한 behavior(function/Method)가 있음. 이때 기본적으로 Encapsulation을 통해 정보들을 숨기고 public behavior를 통한 접근을 허용하는 방식으로 설계를 진행하며 이는 Object-Oriented basic principle(Encapsulation을 통한 Information Hiding) 이다.

  • Object가 할수 있는 행동들을 behavior(opertion)으로 표현하며, behavior를 message로도 표현을 함

    • 주로 attribute를 접근하기 위한 get/set을 operation으로 사용함

1.1.2 Ojbect Collaborate

  • Object는 Collaborate가 필요하며 객체지향은 절차지향과 다르게 data manipulation 관점 이 다름
    • 절차지향의 언어의 경우(함수 기반) Data(Attritue)/Behabior(Operation)가 있을때 타이밍만 맞으면 아무나 가져다 쓸수 있음
    • 객체 지향의 경우, 타이밍이 맞아도 아무나 가져다 쓰는게 아니라 Data/Operation에 해당하는 객체만 가져다가 사용할수 있음
  • 객체 지향에서 다른 Object에 data/operation을 사용하고자 한다면 해당 객체에 public한 getter/setter를 두고 핸들링 할수 있도록 해야하며, 이를 Message Passing/Oject Collaboration/Object Communication이라고 함

  • UML에서 Sequence Diagram을 그릴 때 시스템에 대한 전반적인 동작 Msg를 그릴 텐데 Object Collaboration/Object Communicatioin이 사용되지 안으면 녹색 다이어그램처럼 자기 자신 콜 형태가 많음(system efficienct도 떨어짐), 반대로 OO 철학을 잘 지켰을 경우에는 빨간색 처럼 잘 나오게 됨

1.1.3 Class Define

  • Class란 Object를 만드는 틀(=템플릿)이라 생각하면 됨
    • Object들의 공통적인 특성들을 Attribue/Operation으로 묶는 것이고, Class를 통해 공통의 Attribue을 가지나 data가 다른 Instace를 만들어 냄
    • Class의 Instance가 Object이다.

  • Class에도 Data(attribue)/Behavior(Operation)이 있음
    • Attribue(Data) : 클래스에 이름이 있는 프로퍼티를 말하며, 인스턴스화 수행시 동일한 프로퍼티를 같으나 값이 다른 object들을 여러개 생성함
    • Behavior(Operation) : 프로퍼티에 접근해서 getting/setting할수 있는 것을 말함. Object Diagram(Object 관계 설명하는 다이어그램)에서 Operation은 표현하지 않음(모든 오브젝트들은 같은 클래스에서 인스턴스화[생성] 시 다 같은 오퍼레이션을 갖기 때문임)

1.1.4 Class와 Obejct 관계

  • Class와 Objects의 관계
    • Class는 Object를 만드는 템플릿이고, Object는 Class에서 인스턴스화 된 것이다. -실제세상-SW world-Operating 위에서 실제로 돌아가는 인스턴스 관계 - 실제세상의 물체를 보고 공통의 프로퍼티/오퍼레이션을 묶어 SW의 Class화를 OOA/OOD, Analsys/Design라고 하며, 실제 인스턴스화하여 사용하는 단게를 OOI(Object Oriented Implemnetation)로 말함. (ob : Class)로 표현함(Class를 인스턴스하여 ob를 만들었다 라는 의미임)

  • 지금까지의 내용을 코드레벨에서 확인해보면,

    • 3개의 Attribute/Operation이 있을때 (- 는 private, +는 public)
    • object는 basic이 자기 property는 숨기는게 원칙이라 다 private로 설계
  • 구현은 New에 생성자를 활용하여 Implementation을 수행하며, 오브젝트다이어그램에서 Operation은 다 같기 때문에 표현하지 않음을 확인 가능

  • 위 그름은 OOAD이고 밑은 OOI 단계다.

  • 밑 Obj diagram을 보면 동일한 class로 찍어낸 obj는 동일한 operation을 갖음으로 별다른 표기가 안되어 있는것 또한 확인 가능!

1.1.5 Message Passing(= Ojbect Communication/Collaboration)

  • Object간에 Communication/Collaboration을 고려하여 객체에 바인딩된 data/behaivor에만 접근하도록 작업을 해야함(class 내 getter/setter를 두다 생각하면 될듯함)

  • 정답은 4
    • object은 state/behavior 2개 다 있어야함
      • 2 object는 값이 같더라도 서로 다른 object이다

  • 정답은 1번
    • 다양한을 뺴야함. 동일한 속성을 갖는 a set of object을 하나로 묶는 desciription이다.
This post is licensed under CC BY 4.0 by the author.