OOAD-개체 모델

객체 모델은 객체 측면에서 소프트웨어 응용 프로그램의 요소를 시각화합니다. 이 장에서는 객체 지향 시스템의 기본 개념과 용어를 살펴 보겠습니다.

개체 및 클래스

객체와 클래스의 개념은 본질적으로 서로 연결되어 있으며 객체 지향 패러다임의 기반을 형성합니다.

목적

객체는 물리적 또는 개념적 존재를 가질 수있는 객체 지향 환경의 실제 요소입니다. 각 개체는-

  • 시스템의 다른 개체와 구별되는 ID입니다.

  • 개체의 특성 속성과 개체가 보유하는 속성 값을 결정하는 상태입니다.

  • 상태 변경 측면에서 개체가 수행하는 외부에서 볼 수있는 활동을 나타내는 동작입니다.

응용 프로그램의 필요에 따라 개체를 모델링 할 수 있습니다. 객체는 고객, 자동차 등과 같은 물리적 존재를 가질 수 있습니다. 또는 프로젝트, 프로세스 등과 같은 무형의 개념적 존재.

수업

클래스는 일반적인 동작을 나타내는 동일한 특성 속성을 가진 개체 모음을 나타냅니다. 생성 할 수있는 객체의 청사진 또는 설명을 제공합니다. 클래스의 구성원으로 개체를 만드는 것을 인스턴스화라고합니다. 따라서 객체는 클래스의 인스턴스입니다.

클래스의 구성 요소는 다음과 같습니다.

  • 클래스에서 인스턴스화 할 개체에 대한 속성 집합입니다. 일반적으로 클래스의 다른 객체는 속성 값에 약간의 차이가 있습니다. 속성은 종종 클래스 데이터라고합니다.

  • 클래스 객체의 동작을 나타내는 일련의 작업입니다. 작업은 기능 또는 방법이라고도합니다.

Example

2 차원 공간에서 기하학적 도형 원을 나타내는 간단한 클래스 Circle을 고려해 보겠습니다. 이 클래스의 속성은 다음과 같이 식별 할 수 있습니다-

  • x 좌표, 중심의 x 좌표를 나타냅니다.
  • y 좌표, 중심의 y 좌표를 나타냅니다.
  • a, 원의 반경을 나타냅니다.

일부 작업은 다음과 같이 정의 할 수 있습니다.

  • findArea (), 면적 계산 방법
  • findCircumference (), 둘레를 계산하는 방법
  • scale (), 반경을 늘리거나 줄이는 방법

인스턴스화하는 동안 최소한 일부 속성에 값이 할당됩니다. my_circle 객체를 생성하면 x-coord : 2, y-coord : 3, a : 4와 같은 값을 할당하여 상태를 나타낼 수 있습니다. 이제 스케일링 계수 2로 my_circle에서 scale () 연산을 수행하면 변수 a의 값은 8이됩니다.이 연산은 my_circle의 상태를 변경합니다. 즉, 객체가 특정 동작을 나타냅니다.

캡슐화 및 데이터 숨기기

캡슐화

캡슐화는 클래스 내에서 속성과 메서드를 함께 바인딩하는 프로세스입니다. 캡슐화를 통해 클래스의 내부 세부 정보를 외부에서 숨길 수 있습니다. 클래스가 제공하는 인터페이스를 통해서만 외부에서 클래스의 요소에 액세스 할 수 있습니다.

데이터 숨기기

일반적으로 클래스는 해당 데이터 (속성)가 클래스 메서드를 통해서만 액세스 할 수 있고 직접적인 외부 액세스로부터 격리되도록 설계되었습니다. 개체의 데이터를 격리하는이 과정을 데이터 숨김 또는 정보 숨김이라고합니다.

Example

Circle 클래스에서 데이터 숨김은 클래스 외부에서 속성을 보이지 않게 만들고 클래스 데이터에 액세스하기 위해 클래스에 두 가지 메서드를 추가하여 통합 할 수 있습니다.

  • setValues ​​(), x 좌표, y 좌표 및 a에 값을 할당하는 메서드
  • getValues ​​(), x 좌표, y 좌표 및 a의 값을 검색하는 메서드

여기서 my_circle 개체의 개인 데이터는 Circle 클래스 내에 캡슐화되지 않은 메서드로 직접 액세스 할 수 없습니다. 대신 setValues ​​() 및 getValues ​​() 메소드를 통해 액세스해야합니다.

메시지 전달

모든 응용 프로그램에는 조화로운 방식으로 상호 작용하는 여러 개체가 필요합니다. 시스템의 개체는 메시지 전달을 사용하여 서로 통신 할 수 있습니다. 시스템에 obj1 및 obj2의 두 개체가 있다고 가정합니다. obj1이 obj2가 메서드 중 하나를 실행하도록하려는 경우 개체 obj1은 개체 obj2에 메시지를 보냅니다.

메시지 전달의 특징은-

  • 두 개체 간의 메시지 전달은 일반적으로 단방향입니다.
  • 메시지 전달을 통해 개체 간의 모든 상호 작용이 가능합니다.
  • 메시지 전달에는 기본적으로 클래스 메서드 호출이 포함됩니다.
  • 다른 프로세스의 개체가 메시지 전달에 포함될 수 있습니다.

계승

상속은 기능을 확장하고 개선하여 기존 클래스에서 새 클래스를 만들 수 있도록하는 메커니즘입니다. 기존 클래스를 기본 클래스 / 부모 클래스 / 수퍼 클래스라고하고 새 클래스를 파생 클래스 / 하위 클래스 / 하위 클래스라고합니다. 하위 클래스는 수퍼 클래스가 허용하는 경우 수퍼 클래스의 속성 및 메서드를 상속하거나 파생 할 수 있습니다. 게다가, 서브 클래스는 자체 속성과 메소드를 추가 할 수 있으며 수퍼 클래스 메소드를 수정할 수 있습니다. 상속은 "is – a"관계를 정의합니다.

Example

Mammal 클래스에서 Human, Cat, Dog, Cow 등과 같은 여러 클래스가 파생 될 수 있습니다. 인간, 고양이, 개 및 소는 모두 포유류의 고유 한 특성을 가지고 있습니다. 또한 각각 고유 한 특성이 있습니다. 소는 포유류라고 할 수 있습니다.

상속 유형

  • Single Inheritance − 하위 클래스는 단일 수퍼 클래스에서 파생됩니다.

  • Multiple Inheritance − 서브 클래스는 하나 이상의 슈퍼 클래스에서 파생됩니다.

  • Multilevel Inheritance − 하위 클래스는 다른 클래스에서 파생되는 수퍼 클래스에서 파생됩니다.

  • Hierarchical Inheritance − 한 클래스에는 여러 하위 클래스가 있으며, 각 하위 클래스는 후속 하위 클래스를 가질 수 있으며 트리 구조를 형성하기 위해 여러 수준에 걸쳐 계속됩니다.

  • Hybrid Inheritance − 격자 구조를 형성하기위한 다중 및 다중 수준 상속의 조합.

다음 그림은 다양한 상속 유형의 예를 보여줍니다.

다형성

다형성은 원래 여러 형태를 취할 수있는 능력을 의미하는 그리스어 단어입니다. 객체 지향 패러다임에서 다형성은 작동하는 인스턴스에 따라 다른 방식으로 작업을 사용하는 것을 의미합니다. 다형성은 내부 구조가 다른 객체가 공통 외부 인터페이스를 갖도록합니다. 다형성은 상속을 구현하는 동안 특히 효과적입니다.

Example

각각 findArea () 메소드가있는 Circle과 Square의 두 클래스를 고려해 보겠습니다. 클래스의 메소드 이름과 목적은 동일하지만 내부 구현, 즉 면적 계산 절차는 클래스마다 다릅니다. Circle 클래스의 객체가 findArea () 메서드를 호출하면 작업은 Square 클래스의 findArea () 메서드와 충돌하지 않고 원의 영역을 찾습니다.

일반화 및 전문화

일반화 및 전문화는 클래스 간의 관계 계층 구조를 나타내며 하위 클래스는 수퍼 클래스에서 상속됩니다.

일반화

일반화 과정에서 클래스의 공통 특성이 결합되어 상위 계층의 클래스를 형성합니다. 즉, 하위 클래스가 결합되어 일반화 된 수퍼 클래스를 형성합니다. 그것은“is – a – – 일종의 – –”관계를 나타냅니다. 예를 들어, "자동차는 일종의 육상 차량"또는 "선박은 일종의 수상 차량"입니다.

전문화

전문화는 일반화의 역 과정입니다. 여기서 객체 그룹의 구별되는 기능은 기존 클래스와 특수 클래스를 형성하는 데 사용됩니다. 하위 클래스는 수퍼 클래스의 특수 버전이라고 할 수 있습니다.

다음 그림은 일반화 및 전문화의 예를 보여줍니다.

링크 및 연결

링크

링크는 개체가 다른 개체와 공동 작업하는 연결을 나타냅니다. Rumbaugh는이를 "물체 간의 물리적 또는 개념적 연결"로 정의했습니다. 링크를 통해 한 개체가 메서드를 호출하거나 다른 개체를 탐색 할 수 있습니다. 링크는 둘 이상의 개체 간의 관계를 나타냅니다.

협회

연관은 공통 구조와 공통 동작을 갖는 링크 그룹입니다. 연관은 하나 이상의 클래스 개체 간의 관계를 나타냅니다. 링크는 연관의 인스턴스로 정의 될 수 있습니다.

협회의 정도

연관 정도는 연결에 관련된 클래스 수를 나타냅니다. 차수는 단항, 이진 또는 삼항 일 수 있습니다.

  • unary relationship 같은 클래스의 개체를 연결합니다.

  • binary relationship 두 클래스의 개체를 연결합니다.

  • ternary relationship 세 개 이상의 클래스의 개체를 연결합니다.

연결의 카디널리티 비율

이진 연관의 카디널리티는 연관에 참여하는 인스턴스 수를 나타냅니다. 카디널리티 비율에는 세 가지 유형이 있습니다.

  • One–to–One − 클래스 A의 단일 객체는 클래스 B의 단일 객체와 연관됩니다.

  • One–to–Many − 클래스 A의 단일 객체는 클래스 B의 많은 객체와 연관됩니다.

  • Many–to–Many − A 등급의 객체는 B 등급의 많은 객체와 연관 될 수 있으며 반대로 B 등급의 객체는 A 등급의 많은 객체와 연관 될 수 있습니다.

집계 또는 구성

집계 또는 구성은 클래스가 다른 클래스의 개체 조합으로 구성 될 수있는 클래스 간의 관계입니다. 객체를 다른 클래스의 본문 내에 직접 배치 할 수 있습니다. 집계는 전체에서 부분으로 이동할 수있는 기능과 함께 "일부"또는 "가있는"관계라고합니다. 집계 개체는 하나 이상의 다른 개체로 구성된 개체입니다.

Example

관계에서 "자동차에는 모터가 있습니다", 자동차는 전체 객체 또는 집합체이고 모터는 자동차의 "일부"입니다. 집계는 다음을 나타낼 수 있습니다.

  • Physical containment − 예를 들어 컴퓨터는 모니터, CPU, 마우스, 키보드 등으로 구성되어 있습니다.

  • Conceptual containment − 예, 주주는 주식이 있습니다.

개체 모델의 이점

이제 객체 방향과 관련된 핵심 개념을 살펴 보았으므로이 모델이 제공해야하는 이점에 주목하는 것이 좋습니다.

객체 모델 사용의 이점은 다음과 같습니다.

  • 소프트웨어의 빠른 개발에 도움이됩니다.

  • 유지 관리가 쉽습니다. 모듈에서 오류가 발생하면 프로그래머가 해당 특정 모듈을 수정할 수있는 반면 소프트웨어의 다른 부분은 여전히 ​​실행 중이라고 가정합니다.

  • 비교적 번거롭지 않은 업그레이드를 지원합니다.

  • 개체, 디자인 및 기능을 재사용 할 수 있습니다.

  • 특히 복잡한 시스템의 통합에서 개발 위험을 줄입니다.