1 1 1 장. 객체지향 방법론  객체지향 방법론 본문의 C++ 코드를 이해하기 위해 추상 자료형 개념과 어떻게 일치하는지 이해하기 위해 객체 지향 방법론의 장점은 사용과 구현을 분리하는데 있음  학습목표 프로그램 설계 차원에서 객체지향 방법론의 개념이해 C++ 의.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
제 9 장 구조체와 공용체.
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
C++ Espresso 제12장 템플릿.
자바 5.0 프로그래밍.
제4장 클래스와 객체 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
23장. 구조체와 사용자 정의 자료형 2.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Java 6장. 클래스 : 속성 public class SumTest {
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
C#.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
2장. 추상 자료형 학습목표 프로그램 설계를 위해 추상 자료형을 정의해야 하는 이유를 이해한다.
27장. 모듈화 프로그래밍.
명품 C++ 9장 가상 함수와 추상 클래스.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
20장. 객체지향 프로그래밍 01_ 객체지향 프로그래밍의 시작.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Power Java 제11장 상속.
JA A V W. 06.
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
10장 상속 Section 1 상속의 개요 Section 2 상속과 한정자 Section 3 상속과 생성자
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
( Windows Service Application Debugging )
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
3. 모듈 (5장. 모듈).
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
실습 UBLAB.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
.Net FrameWork for Web2.0 한석수
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
7 생성자 함수.
6 객체.
Presentation transcript:

1 1 1 장. 객체지향 방법론  객체지향 방법론 본문의 C++ 코드를 이해하기 위해 추상 자료형 개념과 어떻게 일치하는지 이해하기 위해 객체 지향 방법론의 장점은 사용과 구현을 분리하는데 있음  학습목표 프로그램 설계 차원에서 객체지향 방법론의 개념이해 C++ 의 객체지향적 요소를 파악 인터페이스와 구현을 분리하는 이유를 이해 절차적 방법론과 객체지향 방법론의 차이를 이해

2 2 객체지향 방법론  객체지향은 프로그램 설계기법 프로그램을 구현하기 위한 언어가 아님  문제 : 부산에 사시는 할머니에게 꽃을 보낸다 절차적 방법론, 절차적 언어 객체지향적 방법론, 객체지향적 언어

3 3 객체지향 방법론  객체지향 용어 메시지, 요구사항 객체, 대리인, 메시지을 받는 사람 객체는 메시지 수신자이며 동시에 전달자 정보의 은닉  객체지향 방법론 주체지향에 대응되는 개념 객체 설정이 중요 ( 예 : 인사관리 객체, 수금관리 객체, 재고관리 객체, … )

4 4 객체지향 방법론  조교에게 책임을 전가

5 5 객체 클래스  클래스 유사한 특징을 지닌 객체를 묶어서 그룹지은 것 객체 = 클래스 인스턴스 같은 메시지에 같은 클래스 객체라면 동일하게 반응  다형성 Poly-Morphism 같은 메시지에 대해 클래스 별로 서로 달리 반응하게 할 수 있음

6 6 클래스 계층구조  상위 클래스, 하위 클래스 하위 클래스를 일반화한 것이 상위 클래스 상위 클래스의 특수한 경우가 하위 클래스 계층구조 선언의 목적은 상속에 있음 한정식 주얼리 오패션 김꽃분 박나리 오난초 Class 인간 Class … Class 상점주인 Class 노래방주인 Class 음식점 주인 Class 꽃집주인 …

7 7 객체지향 설계과정  1 단계 문제를 풀기위해 필요한 객체를 설정  2 단계 객체들 간의 유사속성을 파악  3 단계 유사한 속성을 지닌 객체를 모아 기본 클래스로 선언  4 단계 기본 클래스로부터 특수한 속성을 지닌 하위 클래스를 선언

8 8 C++ 와 객체지향  객체 단위로 2 개의 파일 인터페이스 파일 (.h) 과 구현 파일 (.cpp) 객체 단위의 재사용성을 높일 수 있음  인터페이스 파일 C 용어로는 헤더파일 외부 사용자를 위한 파일 메시지가 정의됨 구현을 몰라도 이 파일만 읽고 불러서 사용할 수 있음 ( 정보의 은닉 ) 제대로 된 커멘트가 중요함 ( 이유 ?)  구현파일 내부 구현자를 위한 파일

9 9 인터페이스 파일 예 코드 1-1: enum suits {diamond, clover, heart, spade} 타입 suit 는 카드무늬 집합 중 하나 enum colors {red, black} 타입 colors 는 카드색 집합 중 하나 class card{ public: card( ); 생성자 함수 ~card( ); 소멸자 함수 colors Color( ); 현재 카드의 색깔을 되돌려 주는 함수 bool IsFaceUp( ); 앞면이 위인지 아래인지 되돌려주는 함수 int Rank( ); 카드에 쓰인 숫자를 되돌려주는 함수 void SetRank(int x); 카드의 숫자를 x 로 세팅하는 함수 void Draw( ); 카드를 화면에 그려내는 함수 void Flip( ); 카드를 뒤집는 멤버함수 private: bool Faceup; 그림이 위로 향하고 있는지 나타내는 변수 int Rval; 카드 숫자를 나타내는 변수 suits Sval; 카드 종류를 나타내는 변수 };

10 인터페이스 파일  인터페이스 파일 외부사용자와의 인터페이스 클래스 선언 파일  퍼블릭 섹션 외부 사용자에게 공개된 ( 직접 불러서 사용할 수 있는 ) 부분 메시지 = C++ 멤버함수 함수 프로토타입만 선언됨 구현내용을 여기에 써서는 안됨 ( 정보의 은닉 ) 선언만 보고도 불러쓸 수 있도록 자세하고도 정확한 커멘트 처리  프라이빗 섹션 외부사용자에게 비공개된 ( 직접 사용할 수 없는 ) 부분 자체 클래스의 멤버함수만이 사용할 수 있음 멤버 데이터 (Member Data, State Variable, Instance Variable) 여기에 멤버함수를 정의하면 그 함수는 자체 클래스의 멤버함수만이 사용할 수 있음  생성자, 소멸자 함수

11 구현파일 예 코드 1-2: #include "card.h" card::card( ) { Sval = diamind; 카드 종류는 다이아몬드 Rval = 7; 카드 숫자는 7 로 Faceup = TRUE; 앞면을 위로 } int card::Rank( ) { return Rval; 현재의 카드 숫자를 되돌려 줌 }

12 구현 파일  클래스명, 더블 콜론 (::), 메시지명 어느 클래스에 속한 함수인지를 표시함 같은 이름의 메시지라 할지라도 클래스에 따라서 처리방식이 다를 수 있음  생성자함수 멤버 데이터 값을 초기화 프라이빗 섹션의 상태변수 사용가능

13 C++ 소스파일 구성 Interface File (.h)Implementation File (.cpp or.c or.cc) 클래스 선언클래스 구현 #define: 매크로 정의 #include: 다른 인터페이스 파일 포함 typedef: 타입선언 #include: 자체 헤더 파일 포함 데이터 / 객체 선언

14 메시지 전달 void main( ) { card MyCard; 내 카드 객체 하나 만들기 MyCard.Flip( ); 내 카드여 ! 뒤집어라 cout << MyCard.Rank( ); 내 카드여 ! 현재 네 숫자가 얼마인지 화면에 찍어라. }  메시지를 받을 객체 다음에 점을 찍고 메시지 명 MyCard 는 객체이고 Flip( ) 은 그 객체가 실행할 수 있는 메시지 필요하다면 괄호 안에 파라미터를 전달 멤버함수 다음에는 파라미터가 없더라도 빈 괄호를 넣는 것이 상례

15 클래스 계층구조 예 class shapeColor Rotate(); Move(); Fillcolor(); class triangleclass circle class rectangle Base, Height Draw(); Area(); GetBase(); Radius Draw(); Area(); GetDiameter(); Width, Length Draw(); Area(); GetWidth();

16 파생 클래스 선언 class triangle: public shape{ public: triangle( ); 생성자 함수 ~triangle( ); 소멸자 함수 void Draw( ); 현재 객체를 화면에 그리는 함수 float Area( ); 현재 객체의 면적을 계산하는 함수 float GetBase( ); 현재 객체의 밑변 길이를 되돌려주는 함수 private: float Base; 밑변의 길이를 나타내는 변수 float Height; 높이의 길이를 나타내는 변수 };  class triangle: public shape 클래스 triangle 이 클래스 shape 의 하위 클래스임을 밝힘.

17 멤버함수의 연결  triangle T; T.Rotate( ); T.Rotate( ); 에 의해 일단 클래스 triangle 에 해당 함수가 있는지를 검색 있으면 그 클래스의 함수가 실행 없으면 상위 클래스인 클래스 shape 에 해당 함수가 있는지를 검색 계속적으로 상위 클래스로 올라가면서 가장 먼저 정의된 것을 상속받음 객체와 메시지의 연결은 실행 시에 일어남 ( 동적 연결 :Dynamic Binding)  하위 클래스에서 상위 클래스와 동일한 함수를 정의 상위 클래스의 함수를 덮어 씌움 일반적인 상위 클래스 함수를, 하위 클래스가 자체 특성에 맞게 특화 (Specialization) 시킬 때 사용되는 기법  triangle T; circle C; rectangle R; T.Draw( ); C.Draw( ); R.Draw( ); Draw 라는 명령은 동일 삼각형, 원, 사각형 등 서로 다른 그림이 그려짐 Draw( ) 라는 동일 메시지를 클래스 별로 다른 방법으로 구현.( 다형성 )

18 프로텍티드 섹션  Protected Section 하위 클래스가 상위 클래스의 상태변수나 메시지를 사용해야 할 때 가 있다. 이를 가능하게 하려면 상위 클래스에서 이들을 protected 섹션 내부 에 정의하면 된다. protected 섹션에 의해서 다른 클래스 객체와 자신의 하위 객체의 접근성을 차별화한다. 즉, 다른 객체는 접근할 수 없지만 같은 가족인 하위 클래스 객체는 접근을 가능하게 한 것이다.

19 연산자 오버로딩  동일한 연산자에 2 개 이상의 의미를 부여  어떤 의미의 함수가 불려오는지는 호출 형태에 의해 결정 Int x, y; x = y; cardClass c1, c2; c1 = c2; 정수 할당인 이퀄 연산자와 카드 할당인 이퀄 연산자는 달라야 함 객체 c1, c2 의 상태변수는 단순한 하나의 변수가 아닐 수 있음. 객체 의 복사는 상태변수 모두를 복사해야 함. 이를 위해 이퀄 연산자에 다른 의미를 부여 연산자 다음에 card 클래스의 객체 C 가 나오면 오버로딩 된 이퀄 연 산자가 실행됨. card.h void operator = (card C); 이퀄 연산자의 우변 c2 에 해당하는 것이 C card.cpp void card::operator = (card C) { FaceUp = C.FaceUp; c1.FaceUp = c2.FaceUp Rval = C.Rval; c1.Rval = c2.Rval Sval = C.Sval; c1.Sval = c2.Sval }

20 객체지향적 언어, 절차적 언어  객체지향 언어, 절차적 언어 객체지향 언어는 객체를 강조 카드 객체에게 뒤집는 작업을 시킬 것인가 절차적 언어는 작업을 강조 뒤집는 함수에게 내 카드를 전달할 것인가  절차적 언어 자주 사용되는 작업을 함수로 정의. 반복 호출에 의해 재 사용성을 높임. 객체 개념이 없음 최소치를 구하는 함수, 평균값을 구하는 함수  객체지향적 언어 객체를 우선적으로 설정 계산기 객체를 일단 선언하고 그 클래스 객체가 실행할 수 있는 함 수를 선언  구조면 객체지향 : 객체 울타리 안에 변수와 함수를 묶어버림 절차적 설계 : 어느 변수가 어느 함수에 사용되는지 분간하기 힘

21 인터페이스와 구현의 분리  객체지향 설계의 최대 장점 인터페이스와 구현의 분리 Message1 Message2 Response1 Response2 인터페이스 관점 : Object=Black Box 구현 관점 : Object=Visible