* OOP Language의 탄생형태
ⓐ 이미 존재한 언어에 객체 지향 개념을 Add
ex) C++ - C언어에 객체 지향 개념 Add
Ada96 - Ada에 객체 지향 개념 Add
CLOS - Lisp에 객체 지향 개념 Add
ⓑ 객체 지향을 목적을 태어난 언어중 구조가 이전에 있던 언어와 비슷하게 만들어진 경우
ex) Java - C++에 기초를 두어 만듬
ⓒ 객체 지향을 목적으로 태어난 언어중 새로운 형태로 나온 언어
ex) small Talk
* 프로그램언어의 개발 관점 변경
이건 앞에서도 필자가 한번 정의한 것 같지만, 한번더 정리 해보겠다.
- 1950~70 : procedural > Sub Program에 중점을 둠
- 1980 초 : Data-Oriented > Data에 중점을 두었다. ADT가 탄생하고 이로인해 Encapsulation과
Information Hiding 개념이 탄생하였다.
- 1980 후 : OOP > ADT에 상속과 동적바인딩을 통한 polymorphism을 추가 하였다.
OOP = ADT + inheritance + Dynamic-binding(polymorphism)
* 상속
- ADT에서 나타난 문제점
: 재사용을 하기 힘들고, 독립적이고 모두 동등한 위치에 존재한다.
- ADT -> Class 로의 변화 (Class의 사례화는 Object)
- Operation -> Method로 변화
※ Message Protocol, Message Interface : Method를 모두 묶은 것
- 상속하는 방법은 크게 두가지로 나뉜다.
> Simplest case : 부모의 모든 operation과 Attr을 모두 상속 시키는 것
> Access controls를 이용하여 부분적으로 상속시킬지 안할지를 정할 수 있다.
(Access controls : public, private, protected)
- 다중 상속을 지원할 것인가?(Single Inheritance vs Multiple Inheritance)
> 다중 상속이 해결하기 힘들어서 언어마다 존재여부가 다르다.
- 상속의 단점 : 상속에 의해 프로그램이 복잡해 질수 있다.
* 다형성 (Polymorphism)
- 다형성이란?
> 추상메소드(Virtual Method), 추상클래스(Virtual Class : 추상 메소드의 모음)를 선언하고, 추상클래스의
객체를 통해서 객체가 담고 있는 자식클래스 정보에 따라서 다르게 동작하게 하는 것을 말한다.
- 다형성을 실현하기 위해서는 반드시 Dynamic Binding이 일어나야한다.
(만일 Static Binding이라면 추상클래스의 객체가 담을 수 있는 클래스 정보는 하나로 제한된다.)
ⓐ 이미 존재한 언어에 객체 지향 개념을 Add
ex) C++ - C언어에 객체 지향 개념 Add
Ada96 - Ada에 객체 지향 개념 Add
CLOS - Lisp에 객체 지향 개념 Add
ⓑ 객체 지향을 목적을 태어난 언어중 구조가 이전에 있던 언어와 비슷하게 만들어진 경우
ex) Java - C++에 기초를 두어 만듬
ⓒ 객체 지향을 목적으로 태어난 언어중 새로운 형태로 나온 언어
ex) small Talk
* 프로그램언어의 개발 관점 변경
이건 앞에서도 필자가 한번 정의한 것 같지만, 한번더 정리 해보겠다.
- 1950~70 : procedural > Sub Program에 중점을 둠
- 1980 초 : Data-Oriented > Data에 중점을 두었다. ADT가 탄생하고 이로인해 Encapsulation과
Information Hiding 개념이 탄생하였다.
- 1980 후 : OOP > ADT에 상속과 동적바인딩을 통한 polymorphism을 추가 하였다.
OOP = ADT + inheritance + Dynamic-binding(polymorphism)
* 상속
- ADT에서 나타난 문제점
: 재사용을 하기 힘들고, 독립적이고 모두 동등한 위치에 존재한다.
- ADT -> Class 로의 변화 (Class의 사례화는 Object)
- Operation -> Method로 변화
※ Message Protocol, Message Interface : Method를 모두 묶은 것
- 상속하는 방법은 크게 두가지로 나뉜다.
> Simplest case : 부모의 모든 operation과 Attr을 모두 상속 시키는 것
> Access controls를 이용하여 부분적으로 상속시킬지 안할지를 정할 수 있다.
(Access controls : public, private, protected)
- 다중 상속을 지원할 것인가?(Single Inheritance vs Multiple Inheritance)
> 다중 상속이 해결하기 힘들어서 언어마다 존재여부가 다르다.
- 상속의 단점 : 상속에 의해 프로그램이 복잡해 질수 있다.
* 다형성 (Polymorphism)
- 다형성이란?
> 추상메소드(Virtual Method), 추상클래스(Virtual Class : 추상 메소드의 모음)를 선언하고, 추상클래스의
객체를 통해서 객체가 담고 있는 자식클래스 정보에 따라서 다르게 동작하게 하는 것을 말한다.
- 다형성을 실현하기 위해서는 반드시 Dynamic Binding이 일어나야한다.
(만일 Static Binding이라면 추상클래스의 객체가 담을 수 있는 클래스 정보는 하나로 제한된다.)