제9장 추상 데이터 타입 및 모듈 (Abstract Data Type & Module)

Slides:



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

Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
Chapter 7 서브프로그램. Introduction 서브 프로그램의 명시 형식 인자전달 방법 ▫ Call by value ▫ Call by value result ▫ Call by reference ▫ Call by name 구현 방법 2.
1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
PowerBuilder Stored Procedure DW
10. 예외 처리.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
Chapter 10 – 추상 자료형 Outline 10.1 소개 10.2 Ada의 추상 자료형 10.3 C++의 추상 자료형
3장 객체-지향 프로그래밍 언어.
Chapter 11 – 추상 자료형 Outline 11.1 소개 11.2 Ada의 추상 자료형 11.3 C++의 추상 자료형
Delphi 2009의 언어 개선 박지훈.임프 2018년 11월 16일 금요일
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
제4장 블록 및 유효범위 Reading Chap. 5 © 숙대 창병모.
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
C++ Programming: Sample Programs
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Espresso 제12장 템플릿.
자바 5.0 프로그래밍.
제4장 클래스와 객체 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
Lesson 7. 클래스와 메소드 - 1.
스택(Stack) 김진수
공학컴퓨터프로그래밍 Python 염익준 교수.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
자바 5.0 프로그래밍.
2장. 추상 자료형 학습목표 프로그램 설계를 위해 추상 자료형을 정의해야 하는 이유를 이해한다.
27장. 모듈화 프로그래밍.
19. 함수 포인터와 void 포인터.
Lesson 2. 기본 데이터형.
6장 데이터 타입(4) 순천향대학교 컴퓨터공학부 하 상 호.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
10장 객체-지향 프로그래밍 I ©창병모.
20장. 객체지향 프로그래밍 01_ 객체지향 프로그래밍의 시작.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
Chapter 4 변수 및 바인딩.
Chapter 02. 소프트웨어와 자료구조.
9장 부프로그램 (3) 순천향대학교 컴퓨터공학부 하 상 호.
Internet Computing KUT Youn-Hee Han
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
Signature, Strong Typing
Signature, Strong Typing
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
Chapter 13 – 객체 지향 프로그래밍 Outline 13.1 소프트웨어의 재사용과 독립성
Signature, Strong Typing
9장 부프로그램 (3) 순천향대학교 컴퓨터공학부 하 상 호.
7주차: Functions and Arrays
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 4 C 프로그램 구성의 기본 C 프로그램에서 이름짓기 C 프로그램에서 이름 충돌/이름 재사용.
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
3. 모듈 (5장. 모듈).
Chapter 14 – 객체 지향 프로그래밍 Outline 14.1 소프트웨어의 재사용과 독립성
발표자 : 이지연 Programming Systems Lab.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
자바 객체 지향 프로그래밍 Ps lab 김윤경.
OOP Practices OOP presentation 6 작성자 Kimjinsik 소속 Mobile computing Lab
6장 데이터 타입(5) 순천향대학교 컴퓨터공학부 하 상 호.
7 생성자 함수.
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
Presentation transcript:

제9장 추상 데이터 타입 및 모듈 (Abstract Data Type & Module)

9.1 캡슐화 및 추상 데이터 타입

추상화(Abstraction) 추상화 개념은 프로그래밍에서 기본 제어 추상화(Control abstraction) 제어 구조(control structures) 프로시저(procedures) 데이터 추상화(Data abstraction) 데이터 타입(data types)

프로시져 사용 예제 typedef struct{ float re,im; } COMPLEX; COMPLEX add( COMPLEX x, y) { . . . } COMPLEX subtract( COMPLEX x, y) { . . . } COMPLEX multiply( COMPLEX x, y) { . . . } COMPLEX divide( COMPLEX x, y) { . . . } COMPLEX a, b, c; c = add(a,b);

프로시져 사용의 문제점 아무 프로시저(연산)이 COMPLEX 데이터 타입 사용 가능 인터페이스와 구현이 분리되어 있지 않다.

캡슐화(Encapsulation) 동기: 큰 프로그램은 두 가지 필요 해법 단지 프로시저로 분할하는 것이 아닌 프로그램 조직 방법 분리 컴파일이 가능한 단위 해법 통합 추상화 혹은 캡슐화 논리적으로 연관된 프로시저들과 데이터 타입의 그룹화

추상 데이터 타입 기본 아이디어 캡슐화 데이터(변수)와 관련 연산(프로시저)의 통합 Simula-67에서부터 시작됨 데이터 타입을 관련 연산들과 함께 정의 데이터 + 연산들 타입의 사용을 정의된 연산들로 제한한다.

추상 데이터 타입 Data Operations

추상 데이터 타입의 장점 수정 용이성 재사용가능성 보안성 구현에 독립적인 인터페이스 표준 인터페이스로 다른 프로그램에서도 재사용 보안성 구현의 세부사항을 프로그램 다른 부분에서 접근 금지

추상 데이터 타입의 예 Modula-2의 Module Ada의 Package Java와 C++의 Class

추상 데이터 타입의 수학적 의미 (S, Op) where S is a set of data Op is a set of operations.

프로그래밍 단위 절차형 언어 ADT를 갖는 언어 객체-지향 언어 프로시저 Modula-2의 Modules Ada의 Package 객체-지향 언어 클래스(Class)

모듈을 이용한 프로그래밍 Module StackManager function pop(s:stack) : integer; type stack; function pop(s:stack) : integer; procedure push(a: integer; s:stack); function newstack : stack; representation of stacks (type stack) . . . initialization (newstack) procedure bodies (pop, push) Module StackManager var s, t : stack; begin s := newstack; t := newstack; push(10,s); . . . end.

정보 은닉(Information Hiding) 구현의 세부 사항을 정의에서 분리 구현의 세부 사항은 프로그램 다른 부분에서접근 금지

모듈(Module) 역할 인터페이스(정의) 부분 구현 부분 데이터(변수)와 관련 연산(프로시저)들의 모음 공용(public) 부분으로 패키지 밖에서도 접근 가능 구현 부분 전용(private) 부분으로 구현의 상세 사항을 작성하고 ADT 밖에서 접근 불가

클래스를 타입 이름으로 In C++ Stack s, t; s.push(7); s.push(8); In Java s = new Stack( ); t = new Stack( ); class Stack { public: Stack(); void push(int a); int pop(); private representation of stacks . . . initialization (Stack) procedure bodies (pop, push)

비교 프로시저 ADT (Modules, Packages) 데이터 타입과 연산들이 별개로 정의된다. 구현 상세사항은 프로그램 전체를 통해서 접근 가능하다. ADT (Modules, Packages) 데이터 타입과 관련 연산들을 함께 정의 인터페이스 부분과 구현 부분 구현 부분은 숨겨지고 접근은 검사한다.

비교 클래스 상속(inheritance) 클래스 자체가 정의된 타입이다. 인터페이스와 구현 객체 데이터와 관련 연산들로 구현 부분은 숨겨지고 접근은 검사한다. 객체 클래스의 실체(instance) 상속(inheritance)

9.2 프로그램 설계

프로그램 설계 프로그램 설계 클래스와 모듈 정확한 객체 혹은 모듈을 발견해야 한다. 어떤 타입을 원하는지 결정하고 각 타입에 대해 관련 연산들을 제공한다. 클래스와 모듈 프로그램의 구조를 형성한다.

모듈 var s, t : stack; begin s := newstack; t := newstack; push(10,s); type stack; function pop(s:stack) : integer; procedure push(a: integer; s:stack); function newstack : stack; type stack = ^ rep rep = record elements: array[0..100] of integer; top : integer; end; (type stack) var s: stack; begin new(s); s^.top :=0; newstack :=s end; procedure bodies (pop, push) Module StackManager var s, t : stack; begin s := newstack; t := newstack; push(10,s); . . . end.

Ada의 패키지 Ada에서 제공하는 ADT Package 구성 Package 패키지 명세(Package specification) 인터페이스 패키지 몸체(Package Body) 명세된 것들에 대한 구현

Ada의 패키지 예제 package COMPLEX_TYPE is type COMPLEX is private; I: constant COMPLEX; function + (X, Y: COMPLEX) return COMPLEX; function - (X, Y: COMPLEX) return COMPLEX; function * (X, Y: COMPLEX) return COMPLEX; function / (X, Y: COMPLEX) return COMPLEX; function +(X:float; Y:COMPLEX) return COMPLEX; function - (X: COMPLEX) return COMPLEX;, function RE (X: COMPLEX) return float; function IM (X: COMPLEX) return float; private type COMPLEX is record re, im : float := 0.0; end record I : contant COMPLEX := (0.0, 1.0); end COMPLEX_TYPE;

Ada의 패키지 예제 package body COMPLEX_TYPE is function +(X,Y:COMPLEX) return COMPLEX is begin return(X.RE+Y.RE, X.IM+Y.IM); end; function RE(X:COMPLEX) return float is begin return X.RE; end; function +(X:float; Y:COMPLEX) return COMPLEX is return(X+Y.RE, Y.IM); ... others ... end COMPLEX_TYPE;

Ada의 패키지 사용 declare use COMPLEX_TYPE; X,Y: COMPLEX; Z: COMPLEX := 1.5 + 2.5*I; begin X := 2.5 + 3.5*I; Y := X + Z; Z := RE(Z) + IM(X)*I; if X = Y then X:= Y+Z; else X:= Y*Z; end if; end

9.3 매개변수를 갖는 추상 데이터 타입

매개변수를 갖는 추상 데이터 타입 동기 매개변수 다형성(Parametric Polymorphism) 함수 혹은 프로시저가 적용될 수 있는 데이터 타입의 확장 매개변수 다형성(Parametric Polymorphism) 타입을 매개변수로 받는 메커니즘 이용 Ada: Generic C++: Template

예제 template <class T> class Stack { T* v; T* p; int sz; public: Stack(int s) { v=p=new T[sz=s];} ~Stack( ) { delete[] v;} void push(T a) { p++ = a;} T pop( ) { return *--p;} Int size( ) { return p-v;} } Stack<char> sc(100); Stack<int> si(100); Stack<point> sp(100);