Serach

2013년 10월 10일 목요일

Object-Oriented Analysis and Design



OOP 3요소

상속은 다른 클래스를 기반으로 클래스를 만들게 하고, 
중복되는 코드를 피할 수 있게합니다.


다형성은 한 클래스가 다른 클래스를 상속하면, 
서브 클래스가 슈퍼클래스를 대신할 수 있도록 허용합니다.


캡슐화는 코드안의 정보가 잘못 사용되는것을 막기 위해 사용, 
애플리케이션의 행동으로부터 데이터를 분리한다. 정보은닉, 또는 관심의 분리라고도 한다.



---------------------------------------------------------------------------------

위대한 소프트웨어 만들기 3단계


여러분의 소프트웨어가 고객이 원하는 기능을 하도록 하세요
   - 요구사항 수집, 분석

객체지향의 기본 원리를 적용해서 소프트웨어를 유연하게 하세요 
  - 중복코드 제거, 객체지향 적용 확인( 리팩토링 )

유지보수와 재사용이 쉬운 디자인을 위해 노력하세요 
  - 디자인 패턴과 원리를 적용하여 재사용이가능하게 해야합니다.




---------------------------------------------------------------------------------


디자인 원리

개방 폐쇠의 원리 ( Open-Closed Principle , OCP )
    기존 코드를 변경하지 않으면서 코드의 수정을 허용하는 것
    확장에는 열려있고, 수정에는 닫혀있어야 한다.
    대표적인 예로는 상속이 있다.


반복 금지의 원리 ( Don't Repeat Yourself , DRY )
    공통되는 부분을 추출하여 추상화하고 한 곳에 두어 중복 코드를 피하라.
    시스템의 정보와 기능이 있어야 할 한 곳(말이 되는 곳)에 두는것을 의미합니다.


단일 책임의 원리 ( Single Reponsibility Principle, SRP )
    시스템의 모든 객체는 하나의 책임만을 가지며, 
    객체가 제공하는 모든 서비스는 그 하나의 책임을 수행하는데 집중되어 있어야 한다.


리스코프 치환 원리 ( Liskov Subsitution Principle , LSP )
    자식 타입들은 부모 타입들이 사용되는 곳에 대체될 수 있어야 한다.
    부모클래스가 사용되는 곳에 아무 문제 없이 자식 클래스도 사용할 수 있어야 한다.


---------------------------------------------------------------------------------


객체지향 원리



변화하는 데이터를 캡슐화

구현에 의존하기보다는 인터페이스에 의존하도록 코딩하라

각 클래스는 변경 요인이 오직 하나이여야 한다.

좋은 요구사항을 얻는 가장 좋은 방법은 시스템이 무엇을 해야 하는지를 이해하는 것입니다.

위대한 소프트웨어는 변경과 확장이 쉽고 고객이 원하는 일을 합니다.

분석을 하면 여러분의 시스템이 실세계에서 잘 동작하게 만들 수 있습니다.

클래스는 확장에는 열려있고, 수정에는 닫혀 있어야 한다. (OCP)

공통되는 부분을 추출하여 추상화하고 한 곳에 두어 중복 코드를 피하라 (DRY)

시스템의 모든 객체는 하나의 책임만을 가지며, 
객체가 제공하는 서비스는 그 하나의 책임을 수행하는데 집중되어 있어야 한다. (SRP)

서브 클래스들은 부모 클래스들이 사용되는 곳에 대체 될 수 있어야 한다. (LSP)

---------------------------------------------------------------------------------


개발 접근 방식


유스케이스 주도 개발
    시스템에서 하나의 유스케이스를 선정하여, 유스케이스의 모든 시나리오를 포함해서
    그 전체를 구현하려고 코드 작업을 완성하는데 중점을 두고 있습니다.
    그 다음에 애플리케이션의 다른 것으로 넘어갑니다.

특징 주도 개발
    하나의 특징에 집중하여 그 특징의 모든 행위 모두를 코드 작업합니다. 
    그 다음에 애플레케이션의 다른 것으로 넘어갑니다.

테스트 주도 개발
    한가지 기능의 테스트 시나리오를 작성하고,
    그 다음에 그 기능에 대한 코드를 작성합니다. 
    그리고 모든 테스트를 통과할때까지 소프트웨어를 작성합니다.


좋은 소프트웨어 개발방법에서는 대체로 개발주기와 여러 단계에서
이러한 개발 모델 모두를 혼용합니다.


---------------------------------------------------------------------------------


약정에 의한 프로그래밍
    소프트웨어 사용자가 지키기로 합의한, 
    소프트웨어가 어떻게 동작해야 하는지에 관한 계약을 설정합니다.



방어적 프로그래밍
    다른 소프트웨어를 신뢰하지 않고, 
    다른 소프트웨어가 나쁜거나 안전하지 않은 정보를 제공하는지 확인하기 위해, 
    광범위하게 오류와 데이터를 점검합니다.



---------------------------------------------------------------------------------


문제를 해결하면서 새로운 문제를 만들지 마세요



객체 디자인 
    - 객체는 자신의 이름이 나타내는 일을 해야한다.
    - 객체는 하나의 개념을 나타내야한다.
    - 사용되지 않는 속성이 있으면 두가지의 일을 할 가능성이 높다.







유스케이스
  새로만들 시스템이나 소프트웨어 변경사항에 대한 요구사항을 찾아내는 방법입니다. 
  고객의 특정한 목표를 달성하기 위해 여러분의 시스템이 무엇을 하는지를 기술합니다
  각 유스케이스는 특정 목표를 달성하기 위해 시스템이 사용자 또는 다른 시스템과 
  어떻게 상호작용하는지를 전달하는 하나 이상의 시나리오를 제공합니다.

유스케이스의 3요소 
  - 명확한 가치(고객의 목표달성에 도움이 되야 한다)
  - 시작과 종료
  - 외부 기동자( 액터, 유스케이스를 시작하는 사람 )


응집도
  하나의 모듈, 클래스, 또는 개체들을 이루는 원소들 사이에 연결의 정도를 나타낸다.
  응집도가 높을수록 결합도가 내려가며, 각 클래스의 역할들이 잘 정의되어 있고 
  잘 연결되어 있는 것이다 각 클래스는 밀접하게 연결되어 있는 
  하나의 매우 특정한 집합의 일을 수행한다.
  응집된 클래스는 하나의 일을 정말 잘하고 그외의 일은 하려고 하지도 않습니다.


도메인 분석
  기존 시스템과 개발 이력, 도메인 전문가들로부터 얻은 지식, 기반 이론, 
  그리고 도메인에서 새로 등장하는 기술을 기반으로
  도메인 관련 정보를 찾아내고, 모으고, 구조화하고, 나타내는 프로세스


아키텍쳐
  시스템의 분할, 나뉜 부분들 사이의 연결과 상호 작용 메커니즘, 
  그리고 시스템의 디자인에 사용된 원리와 결정 사항들을 담고 있는 시스템의 구조
  프로그램의 중요한 부분들과 그들 사이의 관계를 명확히 보여줍니다.




소프트웨어에 유연성을 추가하기 위해 기본적인 객체지향 원리들을 적용하라

변경되는것을 캡슐화 하여, 프로그램을 더 유연하고 변경이 용이하게 만듭니다.

대부분의 디자인은 나쁜 디자인의 분석을 통해 나옵니다.

실수하는것과 변경하는것을 절대 두려워하지 마세요










댓글 없음:

댓글 쓰기