출처: c++ 자료구조론
1. 객체 지향 설계
1.1 알고리즘적 분해와 객체 지향적 분해
1) 고전적 프로그래밍 기법: 알고리즘적 분해 기법 사용
- 소프트웨어를 '프로세스'로 간주.
- 소프트웨어를 프로세스의 스텝을 나타내는 모듈로 분해.
- 프로그램을 구현하기 위한 자료구조는 2차적 관심사이며 프로젝트를 기능적 모듈로 나눈 다음에야 고려.
2) 객체 지향적 분해 : 소프트웨어를 해당 분야의 개체를 모델링하는 잘 정의된 객체의 집합으로 봄.
- 이러한 객체는 서로 상호작용해 소프트웨어 시스템 형성.
- 기능적 분해는 시스템이 객체로 분해된 다음 고려.
- 장점은 소프트웨어의 재사용 조장.
- 이를 통해 시스템의 변화에 따른 유동적 변화,발전 가능.
- 객체가 개체를 모델링 하므로 더 직관적.
1.2 객체 지향 프로그래밍의 기본 정의와 개념
객체: 객체(object)는 계산을 수행하고 상태를 갖는 개체이다. 그러므로 객체는 '데이터'와 '절차적 요소(연산 등)'의 결합으로 볼 수 있다.
객체 지향 프로그래밍(object-oriented programming)은 다음과 같은 구현 방식을 적용한다.
- 1 - 객체는 기본적인 구성 단위(building block)이다.
2- 각 객체는 어떤 타입(또는 클래스)의 인스턴스(instance)이다.
3- 클래스는 상속(inheritance) 관계에 의해 서로 연관되어 있다.
p.s: 상속을 사용하지 않는 프로그래밍 기법은 객체 지향 기법이 아니다.
어떠한 언어가 다음과 같은 기능을 가지고 있는 경우 '객체 지향 언어(object-oriented-language)' 라 한다.
- 1 - 객체를 지원한다.
2 - 모든 객체는 클래스에 속한다.
3 - 상속을 지원한다.
앞의 두 기능을 지원하되 상속 기능을 지원하지 않는 언어들이 있는데 이것들은 '객체 기반 언어'라 한다. C++는 객체 지향 언어인 반면 Javascript는 객체 기반 언어이다.