32. • Object Oriented Analysis, 객체 갖고 분석하다
• Object Oriented Design, 객체 갖고 설계하다
• Object Oriented Programming, 객체 갖고 프로그램 하다
Object Oriented, 한마디로
"객체 갖고 놀자"
33. 객체지향 키워드 5 ( 쫌 아는 척 가능하게 하는 )
클래스(class), 오브젝트(object)
캡슐화 (Encapsulation)
상속성 (Inheritance)
다형성 (Polymorphism)
40. 다양한 용어들, 그러나 같은 뜻
attribute = data = member variables = state = field
behavior = operation = member function = method
• 클래스(class) = 개념(concept) = 타입(type)
• 객체(object) = 실체(instance) = 변수(variable)
41. class Dog {
int x; int y;
public:
void move(int, int);
void bark();
void run();
};
int main() {
Dog d;
d.move(10, 20);
return 0;
}
클래스(class)
공통 특징, 서술
오브젝트 (object)
고유성, 구체, 실제 존재
코드의 문법(C++)은 신경쓰지 마세요 !
전체적인 생김새만 보세요.
42. 오브젝트는 데이터와 데이터에 대한 조작의 묶은 것입니다.
오브젝트의 모양은 클래스(class)에 서술되어 있죠.
43. 코드의 문법(C++)은 신경쓰지 마세요 !
Object = data + operation on data + Identity
class Dog {
int x; int y;
public:
void move(int, int);
void bark();
void run();
};
int main() {
Dog d;
d.move(10, 20);
return 0;
}
44. (리뷰) 클래스와 오브젝트
정의 1. class: 표현 대상에 대한 description
정의 2. object: instance of class
45. 다음 세가지 특성을 지원하는 언어를
객체지향 프로그래밍언어라고 합니다.
① 캡슐화 (encapsulation)
② 상속성 (inheritance)
③ 다형성 (polymorphism)
46. 정의 3. 캡슐화: '데이터'와 '데이터를 다루는 방법'를 묶는 것
data + operation on data
class Dog {
int x; int y;
public:
void move(int, int);
void bark();
void run();
};묶음
47. 캡슐화(encapsulation)
• 캡슐화는 “데이터 + 데이터에 대한 조작”을 묶는 것
• 관련 있는 것을 묶어서 생각하는 것은 매우 자연스러운 일
묶어서 이름을 부여하는 것, 바로 추상화(abstraction)입니다.
48. 정의 4. 상속성
하나의 클래스가지고 있는 특징들을 그대로 다른 클래스가 물려 받는 것
= 데이터 + 조작
49. class Dog {
int x; int y;
public:
void move(int, int);
void bark();
void run();
};
class Poodle: public Dog {
void bark();
};
Dog
Poodle
Poodle에 x,y, move()가 없지만
Dog에서 물려 받습니다.
Bark()는 새로 정의 됩니다.
상속을 표현하는 화살표는
상속의 방향이 아니라
IS-A 관계를 표현합니다.
Poodle IS-A Dog
53. 정의 5. 다형성
상속성의 계층를 따라서 각각의 클래스에 한가지 이름을 줄 수 있는것
• 다형성(polymorphism; 폴리 모피즘) "여러 형태"를 의미하는 그리스어
• 상속성의 계층를 따라서 각 클래스에 동일한 이름의 메소드을 사용할 수 있는 것
• 간단히 말해, 같은 명령을 각기 다른 오브젝트에 줄 수 있다는 뜻
55. 메시지 전달 (message passing)
객체지향관점에서 프로그램은 오브젝트에 message를 보내는 것으로 실행
Dog d;
d = new Poodle()
d.bark() // “왈왈”
d = new Bulldog()
d.bark() // “멍멍”
• d.bark(): “객체 d에 bark라는 메시지를 보낸다”고 읽는다.
• 실제로는 객체 d의 bark()를 호출
• 즉, 실제 구체적 동작과 관계없이
“객체”와 객체에 대한 상호작용 관점을 제공
56. (리뷰) 캡슐화, 상속성, 다형성
정의 3. 캡슐화: Data + operation on data
정의 4. 상속성: 상속 계층을 따라 특성(data, operation)을 공유
정의 5. 다형성: 다양한 형태에 동일한 명령을 사용
57. 객체지향은 프로그래밍 중의 하나입니다.
구조적 프로그래밍 (파스칼, C)
객체지향 프로그래밍 (자바, C++)
명령형 프로그래밍 (포트란, 코볼, 알골, 파스칼, C, 에이다)
선언형 프로그래밍 (프롤로그, SQL)
함수형 프로그래밍 (하스켈, 리스프)
객체기반 (자바스크립트, 에이다), 이벤트 드리븐, 절차적… 등등등등등 많네요.
패러다임
= 관점(인식 체계)
58. 가장 대표적인 프로그래밍 패러다임 두가지
구조적 프로그래밍 Structured Programming (파스칼, C)
객체지향 프로그래밍 Object Oriented Programming (자바, C++)
OOP
59. 구조적 (Structured)
에츠허르 데이크스트라
Sequence, Alternative, Iteration
Divide and quanquer
Top-down design
Pascal, C
객체지향 (Object-Oriented)
앨런 케이
Class, object
Encapsulation, Inheritance, Polymorphism
Simula 67, Smalltalk, C++, Java
60. 에츠허르 데이크스트라
Edsger Wybe Dijkstra, 네덜란드의 컴퓨터 과학자, 1972년 튜링상 수상
• (모든 고수준 언어의 조상)인 ALGOL 개발(’50년대 말)
• (1968) [Goto Statement Considered Harmful]
[소프트웨어 공학]과 Structured Programming 시대를 여심
• [데이크스트라 알고리즘], 처음으로 최단거리 알고리즘을 학문적으로 연구
• [세마포어]의 개념 사용, 운영체제의 영역까지 지대한 영향
• 1972 [Turing Award] 수상
"Can machine think?" (기계가 생각을 할 수 있을까요?)
데이크스트라 교수는 대답 대신 반문했다.
"Can submarine swim?" (잠수함은 헤엄칠 수 있을까?)
(1930~ 2002)
61. 앨런 케이
Alan Curtis Kay 미국의 컴퓨터 과학자
• 이반 서덜랜드와 함께 스케치패드 개발(1960년대 유타대학교)
• 제록스 파크(PARC)에서 Smalltalk 개발 (70년대)
• 객체지향 프로그래밍을 개척한 공로로 튜링상(2003)
미래를 예측하는 가장 좋은 방법은 미래를 발명하는 것이다.
(The best way to predict the future is to invent it.)
(1940~ )
62. Smalltalk, “SW시스템”
Smalltalk의 목표는
프로그래밍을 하지 않아도 되는 시스템을 만드는것이 아니라,
누구라도 쉽게 프로그래밍을 할 수 있는 환경을 만드는 것
Smalltalk는 현대 대부분 객체지향언어의 조상
Smalltalk를 개발한 알토 워크스테이션은 최초의 GUI 시스템
이후 다른 컴퓨터 시스템들이 GUI에 지대한 영향
Smalltalk는 SW시스템 (프로그래밍 언어, 개발환경, 라이브러리로 구성)
Smalltalk-76 User Interface
64. 객체지향과 시뮬레이션의 관계?
최초의 객체지향 언어 “Simula67”는
시뮬레이션을 위해 만들어진 언어
• Class, object 등의 개념은 모두 실세계를 어떻게 묘사할 것인가에 출발
• 실제, 객체지향 분석/설계는 현실세계를 시뮬레이션 한다는 관점에서 진행
65. 객체지향의 장점
1. 자연스런 모델링 (Natual Modeling of Problem)
2. 생산성 향상 (Higher Productivity)
3. 점진적 개발 (Incremental Development)
4. 견고한 의미적 모델링 (Stable Semantic Modeling)
5. 명확한 인터페이스 기술 (Clear Interface Description)
6. 보안 (Secure System)
7. 유지보수의 용이성 (Better Maintainability)
뭔지 모르겠지만
좋다는 이야기 같음
66. 다양한 오해들
• 객체지향 언어 = 객체지향 프로그래밍
누가, 어떻게 쓰냐에 따라 달라진다.
• 기존의 방법보다 좋다
어디에, 어떻게 쓰냐에 따라 다르다.
• 객체지향은 프로그래밍 방법론이다
분석/설계/구현을 포함한 SW시스템 관점에서 봐야
67. 분석/설계
구조적 (Structured)
기능적 분할 (functional decomposition)
절차 중심 (procedure-oriented)
처리 위주 - 프로세스의 계층에 초점
데이터가 드러남, 단일성, 1회사용,
순차적인 알고리즘 위주
객체지향 (Object-Oriented)
객체와 객체간 역할과 관계 중심
객체중심 (Object Orientation)
데이터 감추기 - 행위만 보여진다.
모듈화가 자연스레 달성, 재사용성,
순서없는 메시지 기반
68. 객체지향 분석/설계
1) 문제영역에서 배우(actor)를 찾아내고
2) 각 배우들의 책임과 역할을 정의하고
3) 배우들간의 관계를 지정하고
4) 각 배우들에 대한 대본(script)를 쓴다.
69. 객체지향 분석/설계 방법론 요약
식별하고 일반화하고(object, class),
대상들 간의 관계(inheritance, embedded)를 설정하고,
상호작용 하도록(behavior) 한다.
71. (리뷰) 구조적 프로그래밍, 객체지향 프로그래밍
• 구조적 프로그래밍: 기능, 절차 중심
• 객체지향 프로그래밍: 객체, 관계 중심
72. (리뷰) 기본 개념
• 객체지향: 객체 위주, 즉 “객체 갖고 놀자”
• 클래스(class): 표현 대상에 대한 description
• 오브젝트(object): instance of class
73. (리뷰) 객체 지향의 핵심 개념
• 캡슐화: Data + Operation on data
• 상속성: 상속 계층을 따라 특성(data, operation)을 공유
• 다형성: 다양한 형태에 동일한 명령을 사용
• 메시지 전달 (message passing): 객체간에 메시지를 주고 받아 실행
캡슐화(추상화 능력), 상속성(분류하는 능력), 다형성(같은 방법으로 다루기)
메시지 전달 (실존하는 객체들이 상호작용)
객체지향은 사람의 추상능력, 인식방법에 가까운 개발 방법론