17
소 소 소 소 추추추 추추추 추추 추추추추추 추추 추추 추추추추추 추추 / 추추추추 추추추 추추추 추추추추 추추 추추추추 추추추 추추추 추추추추 추추 추추추추 추추추 추추 추추추추 추추추 추추 ( 추추추추 추추추추 추추 추추추추 추추추추 추추 ) ) 추추추추 추추 추추추추 추추 추추추 추추추 추추 추추추 추추 추추추 추추추 추추 추추추 추추 procedure - procedure - algorithm abstraction algorithm abstraction 추추추추추 추추 추추추추추 추추 ( 추추추추 추추 추추추추 추추 , ‘How’ , ‘How’ 추추 추추 ‘ What’ What’ 추 추추 추 추추 ) 추추 추추 - 추추추추 추추추추 추추 추추추추 추추추추추 추추추 추추 추추추추 추추추추 추추추추 추추 추추추추 추추추추추 추추추 추추 추추추추 추추추추 추추추추추 추추 추추추추추 추 추추추추 추추추추추 추추 추추추추추 추 10 10 소소 소소소 소소 소소소 (abstraction data type) (abstraction data type)

소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

  • Upload
    carl

  • View
    53

  • Download
    5

Embed Size (px)

DESCRIPTION

제10장 추상 자료형 (abstraction data type). 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현  관련된 사항을 묶어 하나로 표현 procedure - algorithm abstraction 연산추상화 제공 (수행과정 묘사 , ‘How’ 보다 ‘What’ 에 중점) 목적 추상화는 기계에서 일이 수행되는 구체적이고 상세한 것을 모르고도 컴퓨터의 수행작업을 쉽게 이해하도록 함. 추상 자료형. - PowerPoint PPT Presentation

Citation preview

Page 1: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

소 개소 개

추상화추상화일부 속성만으로 작업일부 속성만으로 작업 // 객체들을 필요한 정도만 묘사하는 방법객체들을 필요한 정도만 묘사하는 방법필수적인 속성만 표현필수적인 속성만 표현 (( 나머지는 숨기거나 삭제나머지는 숨기거나 삭제 ) ) 유사성만 표현 유사성만 표현 관련된 사항을 묶어 하나로 표현 관련된 사항을 묶어 하나로 표현procedure - procedure - algorithm abstractionalgorithm abstraction

연산추상화 제공연산추상화 제공 (( 수행과정 묘사수행과정 묘사 , ‘How’ , ‘How’ 보다 보다 ‘‘ What’What’ 에 중점에 중점 ))목적 목적

- 추상화는 기계에서 일이 수행되는 구체적이고 상세한 것을 모르고도 추상화는 기계에서 일이 수행되는 구체적이고 상세한 것을 모르고도 컴퓨터의 수행작업을 쉽게 이해하도록 함컴퓨터의 수행작업을 쉽게 이해하도록 함

소 개소 개

추상화추상화일부 속성만으로 작업일부 속성만으로 작업 // 객체들을 필요한 정도만 묘사하는 방법객체들을 필요한 정도만 묘사하는 방법필수적인 속성만 표현필수적인 속성만 표현 (( 나머지는 숨기거나 삭제나머지는 숨기거나 삭제 ) ) 유사성만 표현 유사성만 표현 관련된 사항을 묶어 하나로 표현 관련된 사항을 묶어 하나로 표현procedure - procedure - algorithm abstractionalgorithm abstraction

연산추상화 제공연산추상화 제공 (( 수행과정 묘사수행과정 묘사 , ‘How’ , ‘How’ 보다 보다 ‘‘ What’What’ 에 중점에 중점 ))목적 목적

- 추상화는 기계에서 일이 수행되는 구체적이고 상세한 것을 모르고도 추상화는 기계에서 일이 수행되는 구체적이고 상세한 것을 모르고도 컴퓨터의 수행작업을 쉽게 이해하도록 함컴퓨터의 수행작업을 쉽게 이해하도록 함

제제 1010 장장

추상 자료형추상 자료형 (abstraction data type)(abstraction data type)

Page 2: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

추상 자료형추상 자료형

자료형 자료형 = = 객체들의 집합 객체들의 집합 + + 객체들에 작용하는 연산집합객체들에 작용하는 연산집합 (( 실체화실체화 , , 구축구축 , , 소멸소멸 , , 분리 분리

연산연산 ))

자료 추상화자료 추상화 ((Data Abstraction)Data Abstraction) (( 자료형 표현 자료형 표현 + + 연산들연산들 )) : : 캡슐화캡슐화

캡슐화캡슐화 ((encapsulation)encapsulation)부적당한 사용을 배제하기 위한 보호막부적당한 사용을 배제하기 위한 보호막 ∴ ∴ 창문창문 ((windows) windows) 제공 제공 캡슐화된 정보 사용 캡슐화된 정보 사용구성구성

공개부공개부 ((public part) public part) 또는 가시부또는 가시부 ((visible part)visible part) 전용부전용부 ((private part)private part)

방출방출 ((export)export) 과 도입과 도입 ((import)import)Modula, Euclid Modula, Euclid modulemoduleAda Ada packagepackageSimula Simula 자료 추상화 개념으로 자료 추상화 개념으로 class,class, 최초 도입함최초 도입함CLU CLU clustercluster, ALPHARD , ALPHARD formform

Page 3: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

다음다음 22 가지 조건을 만족하는 자료형가지 조건을 만족하는 자료형자료를 연산과 함께 선언 자료를 연산과 함께 선언 (( 자료자료 추상화 추상화 : data abstraction): data abstraction)정보 은닉 개념 도입 정보 은닉 개념 도입 (( 자료자료 캡슐화 캡슐화 : data: data encapsulation)encapsulation) 구현 종류 구현 종류 : : class, cluster, flavor, form, modula, package, class, cluster, flavor, form, modula, package,

structure ...structure ... 언어 설계의 요구조건인 언어 설계의 요구조건인 modifiability, reusability, safety(modifiability, reusability, safety( 보안보안 ), readability ), readability

… … 만족만족

추상화 제공시 고려 사항추상화 제공시 고려 사항자료 추상화 구문 형태는자료 추상화 구문 형태는 ??영역 규칙과 생성된 객체의 생존기간은 영역 규칙과 생성된 객체의 생존기간은 ??초기화 또는 최종 마무리할 코드 세그먼트 허용 여부초기화 또는 최종 마무리할 코드 세그먼트 허용 여부추상 자료형을 선언하여 여러 개의 실체화 생성 여부추상 자료형을 선언하여 여러 개의 실체화 생성 여부추상 자료형 정의에 매개 변수화 사용 여부추상 자료형 정의에 매개 변수화 사용 여부실체화들 사이에 자료 공유 사용 여부실체화들 사이에 자료 공유 사용 여부

다음다음 22 가지 조건을 만족하는 자료형가지 조건을 만족하는 자료형자료를 연산과 함께 선언 자료를 연산과 함께 선언 (( 자료자료 추상화 추상화 : data abstraction): data abstraction)정보 은닉 개념 도입 정보 은닉 개념 도입 (( 자료자료 캡슐화 캡슐화 : data: data encapsulation)encapsulation) 구현 종류 구현 종류 : : class, cluster, flavor, form, modula, package, class, cluster, flavor, form, modula, package,

structure ...structure ... 언어 설계의 요구조건인 언어 설계의 요구조건인 modifiability, reusability, safety(modifiability, reusability, safety( 보안보안 ), readability ), readability

… … 만족만족

추상화 제공시 고려 사항추상화 제공시 고려 사항자료 추상화 구문 형태는자료 추상화 구문 형태는 ??영역 규칙과 생성된 객체의 생존기간은 영역 규칙과 생성된 객체의 생존기간은 ??초기화 또는 최종 마무리할 코드 세그먼트 허용 여부초기화 또는 최종 마무리할 코드 세그먼트 허용 여부추상 자료형을 선언하여 여러 개의 실체화 생성 여부추상 자료형을 선언하여 여러 개의 실체화 생성 여부추상 자료형 정의에 매개 변수화 사용 여부추상 자료형 정의에 매개 변수화 사용 여부실체화들 사이에 자료 공유 사용 여부실체화들 사이에 자료 공유 사용 여부

추상 자료형추상 자료형

Page 4: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

추상 자료형추상 자료형

structurestructure queue = queue = operations ADDQ, DELETEQ, ISEMPTYQoperations ADDQ, DELETEQ, ISEMPTYQ representationrepresentation ... ... end repend rep procedure ADDQ(...)procedure ADDQ(...) . . .. . . end ADDQend ADDQ procedure DELETEQ(...)procedure DELETEQ(...) . . .. . . end DELETEQend DELETEQ procedure ISEMPTYQ(...)procedure ISEMPTYQ(...) . . .. . . end ISEMPTYQend ISEMPTYQ procedure NEXT(...) // procedure NEXT(...) // 지역함수지역함수 , ,

내부에서만내부에서만 . . .. . . end NEXTend NEXT begin begin

initialization codeinitialization code endendend queueend queue

structurestructure queue = queue = operations ADDQ, DELETEQ, ISEMPTYQoperations ADDQ, DELETEQ, ISEMPTYQ representationrepresentation ... ... end repend rep procedure ADDQ(...)procedure ADDQ(...) . . .. . . end ADDQend ADDQ procedure DELETEQ(...)procedure DELETEQ(...) . . .. . . end DELETEQend DELETEQ procedure ISEMPTYQ(...)procedure ISEMPTYQ(...) . . .. . . end ISEMPTYQend ISEMPTYQ procedure NEXT(...) // procedure NEXT(...) // 지역함수지역함수 , ,

내부에서만내부에서만 . . .. . . end NEXTend NEXT begin begin

initialization codeinitialization code endendend queueend queue

<<queue queue 구조구조 >> •구성구성 1) 1) 연산 이름연산 이름 2) 2) 자료형 표현자료형 표현 3) 3) 연산 구현연산 구현 4) 4) 초기화초기화• operationsoperations - - 방출된 연산 방출된 연산 : : ADDQ, ADDQ, DELETEQ, ISEMPTYQDELETEQ, ISEMPTYQ - - 방출되지 않은 연산 방출되지 않은 연산 : : NEXTNEXT• representation … end reprepresentation … end rep - - 큐의 표현 정의큐의 표현 정의

<<queue queue 형 변수 선언형 변수 선언 >> var x:queuevar x:queue

<<queue queue 구조구조 >> •구성구성 1) 1) 연산 이름연산 이름 2) 2) 자료형 표현자료형 표현 3) 3) 연산 구현연산 구현 4) 4) 초기화초기화• operationsoperations - - 방출된 연산 방출된 연산 : : ADDQ, ADDQ, DELETEQ, ISEMPTYQDELETEQ, ISEMPTYQ - - 방출되지 않은 연산 방출되지 않은 연산 : : NEXTNEXT• representation … end reprepresentation … end rep - - 큐의 표현 정의큐의 표현 정의

<<queue queue 형 변수 선언형 변수 선언 >> var x:queuevar x:queue

Queue Queue 구조 구조 (structure (structure 개념 사용개념 사용 )) Queue Queue 구조 구조 (structure (structure 개념 사용개념 사용 ))

Page 5: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

추상 자료형추상 자료형

structure queue =structure queue = operations ADDQ,DELETEQ, operations ADDQ,DELETEQ,

ISEMPTYQ;ISEMPTYQ; representationrepresentation integer array q(0:99);integer array q(0:99); integer front, rear;integer front, rear; end repend rep

procedure NEXT(I:integer);procedure NEXT(I:integer); i := (i + 1) mod 100i := (i + 1) mod 100 end NEXT;end NEXT;

procedure ADDQ(p:queue, procedure ADDQ(p:queue, item:integer)item:integer) ;;

NEXT(rear)NEXT(rear) if front = rear then QUEUFULLif front = rear then QUEUFULL

else q(rear) := itemelse q(rear) := item endifendif end ADDQ;end ADDQ;

structure queue =structure queue = operations ADDQ,DELETEQ, operations ADDQ,DELETEQ,

ISEMPTYQ;ISEMPTYQ; representationrepresentation integer array q(0:99);integer array q(0:99); integer front, rear;integer front, rear; end repend rep

procedure NEXT(I:integer);procedure NEXT(I:integer); i := (i + 1) mod 100i := (i + 1) mod 100 end NEXT;end NEXT;

procedure ADDQ(p:queue, procedure ADDQ(p:queue, item:integer)item:integer) ;;

NEXT(rear)NEXT(rear) if front = rear then QUEUFULLif front = rear then QUEUFULL

else q(rear) := itemelse q(rear) := item endifendif end ADDQ;end ADDQ;

procedure DELETEQ(q:queue)procedure DELETEQ(q:queue) returns item:integer;returns item:integer; if ISEMFTYQ(q) then if ISEMFTYQ(q) then

QUEUEEMPTYQUEUEEMPTY else NEXT(front)else NEXT(front) item := item :=

q(front)q(front) end ifend if end DELETEQ;end DELETEQ;

procedure ISEMPTYQ(qprocedure ISEMPTYQ(q ::queue)queue)

returns flag:boolean;returns flag:boolean; flag := front = rearflag := front = rear end ISEMPTYQ;end ISEMPTYQ;

beginbegin front := rear := 1front := rear := 1 end;end;end queueend queue

procedure DELETEQ(q:queue)procedure DELETEQ(q:queue) returns item:integer;returns item:integer; if ISEMFTYQ(q) then if ISEMFTYQ(q) then

QUEUEEMPTYQUEUEEMPTY else NEXT(front)else NEXT(front) item := item :=

q(front)q(front) end ifend if end DELETEQ;end DELETEQ;

procedure ISEMPTYQ(qprocedure ISEMPTYQ(q ::queue)queue)

returns flag:boolean;returns flag:boolean; flag := front = rearflag := front = rear end ISEMPTYQ;end ISEMPTYQ;

beginbegin front := rear := 1front := rear := 1 end;end;end queueend queue

완성된 완성된 Queue Queue 구조구조

Page 6: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

AdaAda 의 자료 추상화의 자료 추상화

AdaAda 의 단위 프로그램 종류의 단위 프로그램 종류subprogramsubprogram(procedure, function)(procedure, function)package package 모듈 프로그램이면서 모듈 프로그램이면서 자료추상화 지원자료추상화 지원Task Task 모듈 프로그램이면서 병행성 지원모듈 프로그램이면서 병행성 지원

PackagePackage

구성구성 1) 1) 명세부 명세부

① ① 가시부가시부 –– 자료 자료 (( 연산 이름과 자료형 이름연산 이름과 자료형 이름 )) 방출 또는 도입방출 또는 도입 withwith : : 다른 다른 packagepackage 로 자료 방출로 자료 방출 , , useuse : : 도입된 이름의 한정자 생략하여 사용도입된 이름의 한정자 생략하여 사용② ② 전용부전용부 - - 자료 방출 불허용자료 방출 불허용 , , 자료형의 구체적인 표현 정의자료형의 구체적인 표현 정의

2) 2) 몸체부몸체부 - - 연산연산 (( 부프로그램부프로그램 ) ) 구현구현

특징 특징 : : 명세부명세부 , , 몸체부의 변수 몸체부의 변수 : own : own 변수 개념으로 가시부의 부 프로그램 호출 시 변수 개념으로 가시부의 부 프로그램 호출 시

변수의 이전 값이 남아 있음 변수의 이전 값이 남아 있음 (( 정적변수 특성정적변수 특성 ))

AdaAda 의 자료 추상화의 자료 추상화

AdaAda 의 단위 프로그램 종류의 단위 프로그램 종류subprogramsubprogram(procedure, function)(procedure, function)package package 모듈 프로그램이면서 모듈 프로그램이면서 자료추상화 지원자료추상화 지원Task Task 모듈 프로그램이면서 병행성 지원모듈 프로그램이면서 병행성 지원

PackagePackage

구성구성 1) 1) 명세부 명세부

① ① 가시부가시부 –– 자료 자료 (( 연산 이름과 자료형 이름연산 이름과 자료형 이름 )) 방출 또는 도입방출 또는 도입 withwith : : 다른 다른 packagepackage 로 자료 방출로 자료 방출 , , useuse : : 도입된 이름의 한정자 생략하여 사용도입된 이름의 한정자 생략하여 사용② ② 전용부전용부 - - 자료 방출 불허용자료 방출 불허용 , , 자료형의 구체적인 표현 정의자료형의 구체적인 표현 정의

2) 2) 몸체부몸체부 - - 연산연산 (( 부프로그램부프로그램 ) ) 구현구현

특징 특징 : : 명세부명세부 , , 몸체부의 변수 몸체부의 변수 : own : own 변수 개념으로 가시부의 부 프로그램 호출 시 변수 개념으로 가시부의 부 프로그램 호출 시

변수의 이전 값이 남아 있음 변수의 이전 값이 남아 있음 (( 정적변수 특성정적변수 특성 ))

추상 자료형추상 자료형

Page 7: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

package BSTREES ispackage BSTREES is type BSTREEPTR is private;type BSTREEPTR is private; function HAS(I:ITEM, function HAS(I:ITEM,

P:BSTREEPTR)P:BSTREEPTR) return BOOLEAN;return BOOLEAN;

procedure INSERT(ILITEM, in procedure INSERT(ILITEM, in out P:BSTREEPTR );out P:BSTREEPTR );

function EQUAL(P, function EQUAL(P, Q:BSTREEPTR)Q:BSTREEPTR)

return BOOLEAN;return BOOLEAN; privateprivate type BSTREEPTR;type BSTREEPTR; type BSTREE istype BSTREE is recordrecord DATE:ITEM;DATE:ITEM; LEFTCHILD:BSTREESPTR;LEFTCHILD:BSTREESPTR; RIGHTCHILD:BSTREEPTR;RIGHTCHILD:BSTREEPTR; end record;end record; type BSTREEPTR is access type BSTREEPTR is access

BSTREE;BSTREE;end;end;

package BSTREES ispackage BSTREES is type BSTREEPTR is private;type BSTREEPTR is private; function HAS(I:ITEM, function HAS(I:ITEM,

P:BSTREEPTR)P:BSTREEPTR) return BOOLEAN;return BOOLEAN;

procedure INSERT(ILITEM, in procedure INSERT(ILITEM, in out P:BSTREEPTR );out P:BSTREEPTR );

function EQUAL(P, function EQUAL(P, Q:BSTREEPTR)Q:BSTREEPTR)

return BOOLEAN;return BOOLEAN; privateprivate type BSTREEPTR;type BSTREEPTR; type BSTREE istype BSTREE is recordrecord DATE:ITEM;DATE:ITEM; LEFTCHILD:BSTREESPTR;LEFTCHILD:BSTREESPTR; RIGHTCHILD:BSTREEPTR;RIGHTCHILD:BSTREEPTR; end record;end record; type BSTREEPTR is access type BSTREEPTR is access

BSTREE;BSTREE;end;end;

package body BSTREES ispackage body BSTREES isfunction HAS(I:ITEM,P:BSTREEPTR) return function HAS(I:ITEM,P:BSTREEPTR) return

BOOLEANBOOLEAN is Q:BSTREEPTR;is Q:BSTREEPTR; beginbegin Q := P;Q := P; looploop if Q = null then return FALSE;if Q = null then return FALSE; elsif I < Q.DATA then Q := elsif I < Q.DATA then Q :=

Q.LEFTCHILD;Q.LEFTCHILD; elsif I > Q.DATA then Q := elsif I > Q.DATA then Q :=

Q.RIGHTCHILD;Q.RIGHTCHILD; else return TRUE;else return TRUE; end if;end if; end loop;end loop; end HAS;end HAS;procedure INSERT(I:ITEM, in out:BSTREEPTR);procedure INSERT(I:ITEM, in out:BSTREEPTR); ---- 프로시저 프로시저 INSERTINSERT 의 기술의 기술

function EQUAL(P, Q:BSTREEPTR) return function EQUAL(P, Q:BSTREEPTR) return BOOLEAN;BOOLEAN;

if P = null and Q = null then return TRUE;if P = null and Q = null then return TRUE; elsif P = null or Q = null then return elsif P = null or Q = null then return

FALSE;FALSE; elsif P.DATA = Q.DATA thenelsif P.DATA = Q.DATA then if EQUAL (P.LEFTCHILD, Q.LEFTCHILD) if EQUAL (P.LEFTCHILD, Q.LEFTCHILD)

thenthen return EQUAL (P.RIGHTCHILD, return EQUAL (P.RIGHTCHILD,

Q.RIGHTCHILD);Q.RIGHTCHILD); else return FALSE;else return FALSE; end if;end if; else return FALSE;else return FALSE; end if;end if;end BSTREES;end BSTREES;

package body BSTREES ispackage body BSTREES isfunction HAS(I:ITEM,P:BSTREEPTR) return function HAS(I:ITEM,P:BSTREEPTR) return

BOOLEANBOOLEAN is Q:BSTREEPTR;is Q:BSTREEPTR; beginbegin Q := P;Q := P; looploop if Q = null then return FALSE;if Q = null then return FALSE; elsif I < Q.DATA then Q := elsif I < Q.DATA then Q :=

Q.LEFTCHILD;Q.LEFTCHILD; elsif I > Q.DATA then Q := elsif I > Q.DATA then Q :=

Q.RIGHTCHILD;Q.RIGHTCHILD; else return TRUE;else return TRUE; end if;end if; end loop;end loop; end HAS;end HAS;procedure INSERT(I:ITEM, in out:BSTREEPTR);procedure INSERT(I:ITEM, in out:BSTREEPTR); ---- 프로시저 프로시저 INSERTINSERT 의 기술의 기술

function EQUAL(P, Q:BSTREEPTR) return function EQUAL(P, Q:BSTREEPTR) return BOOLEAN;BOOLEAN;

if P = null and Q = null then return TRUE;if P = null and Q = null then return TRUE; elsif P = null or Q = null then return elsif P = null or Q = null then return

FALSE;FALSE; elsif P.DATA = Q.DATA thenelsif P.DATA = Q.DATA then if EQUAL (P.LEFTCHILD, Q.LEFTCHILD) if EQUAL (P.LEFTCHILD, Q.LEFTCHILD)

thenthen return EQUAL (P.RIGHTCHILD, return EQUAL (P.RIGHTCHILD,

Q.RIGHTCHILD);Q.RIGHTCHILD); else return FALSE;else return FALSE; end if;end if; else return FALSE;else return FALSE; end if;end if;end BSTREES;end BSTREES;

<<package BSTREES package BSTREES 명세 선언명세 선언 >><<package BSTREES package BSTREES 명세 선언명세 선언 >>< < package BSTREES package BSTREES 몸체부몸체부 >>< < package BSTREES package BSTREES 몸체부몸체부 >>

이진 트리 이진 트리 package package 명세부명세부 , , 몸체부몸체부 이진 트리 이진 트리 package package 명세부명세부 , , 몸체부몸체부

추상 자료형추상 자료형

Page 8: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

declaredeclare

use BSTREESuse BSTREES ;; P,Q : BSTREEPTRP,Q : BSTREEPTR ;; beginbegin

p := new BSTREE('A', null, null)p := new BSTREE('A', null, null)

INSERT('B', P);INSERT('B', P);

INSERT('Z', P);INSERT('Z', P);

INSERT('H', P);INSERT('H', P);

end;end;

declaredeclare

use BSTREESuse BSTREES ;; P,Q : BSTREEPTRP,Q : BSTREEPTR ;; beginbegin

p := new BSTREE('A', null, null)p := new BSTREE('A', null, null)

INSERT('B', P);INSERT('B', P);

INSERT('Z', P);INSERT('Z', P);

INSERT('H', P);INSERT('H', P);

end;end;

<<BSTREES BSTREES 패키지 호출패키지 호출 >><<BSTREES BSTREES 패키지 호출패키지 호출 >>

추상 자료형추상 자료형

Page 9: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

generic SIZEgeneric SIZE :: INTEGERINTEGER;;type ELEM is private;type ELEM is private;package STACKS ispackage STACKS is type STACK is limited private;type STACK is limited private; procedure PUSH(Sprocedure PUSH(S :: in out STACK; Ein out STACK; E :: in ELEM);in ELEM); procedure POP(Sprocedure POP(S :: in out STACK; Ein out STACK; E :: out ELEM);out ELEM); OVERFLOW, UNDERFLOW : exception;OVERFLOW, UNDERFLOW : exception; privateprivate type STACK istype STACK is recordrecord SPACESPACE :: array(1 .. array(1 .. SIZESIZE) of ELEM;) of ELEM; INDEXINDEX :: INTEGER range 0 .. SIZE := 0;INTEGER range 0 .. SIZE := 0; end record;end record;end;end;package body STACKS ispackage body STACKS is procedure PUSH(S:in out STACK; E:in ELEM) isprocedure PUSH(S:in out STACK; E:in ELEM) is beginbegin if S.INDEX = SIZE then raise OVERFLOW; endif;if S.INDEX = SIZE then raise OVERFLOW; endif; S.INDEX := S.INDEX + 1;S.INDEX := S.INDEX + 1; S.SPACE(S.INDEX) := E;S.SPACE(S.INDEX) := E; end PUSH;end PUSH; procedure POP(S:in out STACK; E:out ELEM) isprocedure POP(S:in out STACK; E:out ELEM) is beginbegin if S.INDEX = 0 then raise UNDERFLOW; endif;if S.INDEX = 0 then raise UNDERFLOW; endif; E := S.SPACE(S.INDEX);E := S.SPACE(S.INDEX); S.INDEXS.INDEX :: = S.INDEX - 1;= S.INDEX - 1; end POP;end POP;end STACKS;end STACKS;

generic SIZEgeneric SIZE :: INTEGERINTEGER;;type ELEM is private;type ELEM is private;package STACKS ispackage STACKS is type STACK is limited private;type STACK is limited private; procedure PUSH(Sprocedure PUSH(S :: in out STACK; Ein out STACK; E :: in ELEM);in ELEM); procedure POP(Sprocedure POP(S :: in out STACK; Ein out STACK; E :: out ELEM);out ELEM); OVERFLOW, UNDERFLOW : exception;OVERFLOW, UNDERFLOW : exception; privateprivate type STACK istype STACK is recordrecord SPACESPACE :: array(1 .. array(1 .. SIZESIZE) of ELEM;) of ELEM; INDEXINDEX :: INTEGER range 0 .. SIZE := 0;INTEGER range 0 .. SIZE := 0; end record;end record;end;end;package body STACKS ispackage body STACKS is procedure PUSH(S:in out STACK; E:in ELEM) isprocedure PUSH(S:in out STACK; E:in ELEM) is beginbegin if S.INDEX = SIZE then raise OVERFLOW; endif;if S.INDEX = SIZE then raise OVERFLOW; endif; S.INDEX := S.INDEX + 1;S.INDEX := S.INDEX + 1; S.SPACE(S.INDEX) := E;S.SPACE(S.INDEX) := E; end PUSH;end PUSH; procedure POP(S:in out STACK; E:out ELEM) isprocedure POP(S:in out STACK; E:out ELEM) is beginbegin if S.INDEX = 0 then raise UNDERFLOW; endif;if S.INDEX = 0 then raise UNDERFLOW; endif; E := S.SPACE(S.INDEX);E := S.SPACE(S.INDEX); S.INDEXS.INDEX :: = S.INDEX - 1;= S.INDEX - 1; end POP;end POP;end STACKS;end STACKS;

• 포괄 패키지포괄 패키지 ((STACK STACK 구현구현 )) - - 스택 크기와 원소형 매개변수화스택 크기와 원소형 매개변수화 - - 매개변수 추상 자료형매개변수 추상 자료형• 연산연산 PUSH( ), POP( )PUSH( ), POP( )• 예외조건예외조건 OVERFLOW, UNDERFLOW OVERFLOW, UNDERFLOW • 실체화 실체화 (( 크기가 크기가 100100 인 정수형 스택 인 정수형 스택 package package 생성생성 )) package INTSTACK is newpackage INTSTACK is new STACKS(SIZE =>100, ELEM=>INTEGER);STACKS(SIZE =>100, ELEM=>INTEGER);• 생성된 생성된 packagepackage 사용 사용

declaredeclare

use INTSTACK;use INTSTACK;

X, YX, Y :: STACK;STACK;

......

beginbegin

PUSH(X, 175);PUSH(X, 175);

PUSH(Y, 82);PUSH(Y, 82);

POP(X, I);POP(X, I);

POP(Y, J);POP(Y, J);

end;end;

• 포괄 패키지포괄 패키지 ((STACK STACK 구현구현 )) - - 스택 크기와 원소형 매개변수화스택 크기와 원소형 매개변수화 - - 매개변수 추상 자료형매개변수 추상 자료형• 연산연산 PUSH( ), POP( )PUSH( ), POP( )• 예외조건예외조건 OVERFLOW, UNDERFLOW OVERFLOW, UNDERFLOW • 실체화 실체화 (( 크기가 크기가 100100 인 정수형 스택 인 정수형 스택 package package 생성생성 )) package INTSTACK is newpackage INTSTACK is new STACKS(SIZE =>100, ELEM=>INTEGER);STACKS(SIZE =>100, ELEM=>INTEGER);• 생성된 생성된 packagepackage 사용 사용

declaredeclare

use INTSTACK;use INTSTACK;

X, YX, Y :: STACK;STACK;

......

beginbegin

PUSH(X, 175);PUSH(X, 175);

PUSH(Y, 82);PUSH(Y, 82);

POP(X, I);POP(X, I);

POP(Y, J);POP(Y, J);

end;end;

• 포괄 패키지 추상 자료형 포괄 패키지 추상 자료형 (( 표 표 1100 .5 .5 generic stack package)generic stack package)• 포괄 패키지 추상 자료형 포괄 패키지 추상 자료형 (( 표 표 1100 .5 .5 generic stack package)generic stack package)

추상 자료형추상 자료형

Page 10: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

C++C++ 의 자료 추상화의 자료 추상화

객체지향 프로그래밍 지원객체지향 프로그래밍 지원 자료 추상화 지원자료 추상화 지원 : : 클래스클래스 ((class)class) 제공제공

cf)cf) Ada Ada : : 패키지를 사용하여 캡슐화하고 추상화 지원패키지를 사용하여 캡슐화하고 추상화 지원

클래스 개념클래스 개념 클래스의 실체클래스의 실체 ((instances)instances)

객체의 선언으로 생성객체의 선언으로 생성 실체화 시킨 선언문의 영역에서 벗어날 때 소멸실체화 시킨 선언문의 영역에서 벗어날 때 소멸 (( 스택 변수로 한정스택 변수로 한정 )) 데이터 멤버 데이터 멤버 : : 클래스에서 정의된 자료클래스에서 정의된 자료 멤버함수 멤버함수 : : 클래스에서 정의된 함수 클래스에서 정의된 함수 한 클래스의 모든 실체한 클래스의 모든 실체 (( 객체객체 )) 들은 하나의 멤버 함수 집합 공유하며들은 하나의 멤버 함수 집합 공유하며 , ,

각자 자신의 클래스 데이터 멤버의 집합 소유각자 자신의 클래스 데이터 멤버의 집합 소유 참고 참고 클래스는 힙 변수적 데이터 멤버 소유 가능 클래스는 힙 변수적 데이터 멤버 소유 가능 (new, delete (new, delete 지지

원원 ))

C++C++ 의 자료 추상화의 자료 추상화

객체지향 프로그래밍 지원객체지향 프로그래밍 지원 자료 추상화 지원자료 추상화 지원 : : 클래스클래스 ((class)class) 제공제공

cf)cf) Ada Ada : : 패키지를 사용하여 캡슐화하고 추상화 지원패키지를 사용하여 캡슐화하고 추상화 지원

클래스 개념클래스 개념 클래스의 실체클래스의 실체 ((instances)instances)

객체의 선언으로 생성객체의 선언으로 생성 실체화 시킨 선언문의 영역에서 벗어날 때 소멸실체화 시킨 선언문의 영역에서 벗어날 때 소멸 (( 스택 변수로 한정스택 변수로 한정 )) 데이터 멤버 데이터 멤버 : : 클래스에서 정의된 자료클래스에서 정의된 자료 멤버함수 멤버함수 : : 클래스에서 정의된 함수 클래스에서 정의된 함수 한 클래스의 모든 실체한 클래스의 모든 실체 (( 객체객체 )) 들은 하나의 멤버 함수 집합 공유하며들은 하나의 멤버 함수 집합 공유하며 , ,

각자 자신의 클래스 데이터 멤버의 집합 소유각자 자신의 클래스 데이터 멤버의 집합 소유 참고 참고 클래스는 힙 변수적 데이터 멤버 소유 가능 클래스는 힙 변수적 데이터 멤버 소유 가능 (new, delete (new, delete 지지

원원 ))

추상 자료형추상 자료형

Page 11: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

멤버 함수 멤버 함수 ((member function)member function) 함수의 함수의 headerheader(( 함수명 정의함수명 정의 )) 와 와 bodybody(( 프로그램 프로그램 routine routine 문장들문장들 )) 로 로

구성구성 클래스 내에서 인라인클래스 내에서 인라인 ((inline)inline) 됨됨

생성자 생성자 ((constructor)constructor) 객체를 생성할 때 필요한 매개 변수의 제공과 초기화 기능객체를 생성할 때 필요한 매개 변수의 제공과 초기화 기능

소멸자 소멸자 ((destructor)destructor) 클래스 이름 앞에 ‘클래스 이름 앞에 ‘ ~~’ ’ 기호를 붙여서 사용기호를 붙여서 사용 클래스 실체 소멸시 묵시적으로 호출클래스 실체 소멸시 묵시적으로 호출 할당된 힙 기억 장소 해제할당된 힙 기억 장소 해제

멤버 함수 멤버 함수 ((member function)member function) 함수의 함수의 headerheader(( 함수명 정의함수명 정의 )) 와 와 bodybody(( 프로그램 프로그램 routine routine 문장들문장들 )) 로 로

구성구성 클래스 내에서 인라인클래스 내에서 인라인 ((inline)inline) 됨됨

생성자 생성자 ((constructor)constructor) 객체를 생성할 때 필요한 매개 변수의 제공과 초기화 기능객체를 생성할 때 필요한 매개 변수의 제공과 초기화 기능

소멸자 소멸자 ((destructor)destructor) 클래스 이름 앞에 ‘클래스 이름 앞에 ‘ ~~’ ’ 기호를 붙여서 사용기호를 붙여서 사용 클래스 실체 소멸시 묵시적으로 호출클래스 실체 소멸시 묵시적으로 호출 할당된 힙 기억 장소 해제할당된 힙 기억 장소 해제

추상 자료형추상 자료형

Page 12: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

추상 자료형추상 자료형

##include <iostream.h>include <iostream.h>template <class Type>template <class Type>class stack {class stack { private:private: Type *stack_ptr;Type *stack_ptr; int max_len;int max_len; int top_ptr;int top_ptr; public:public:

stack( ) { stack_ptr = new Type[100]; // stack( ) { stack_ptr = new Type[100]; // 생성자생성자 max_len = 99;max_len = 99; top_ptr = -1; top_ptr = -1; }}stack (int size) { stack (int size) { // // 생성자이면서 틀 매개변수생성자이면서 틀 매개변수 stack_ptr = new Type[size];stack_ptr = new Type[size]; max_len = size-1;max_len = size-1; top = -1; top = -1; }}~stack( ) { delete stack_ptr; }~stack( ) { delete stack_ptr; }void push (Type number) {void push (Type number) {

if (top_ptr == max_len)if (top_ptr == max_len) cout << “Error in push-stack is full\n”;cout << “Error in push-stack is full\n”; else stack_ptr[++top_ptr]=number;else stack_ptr[++top_ptr]=number;

}}void pop( ) {void pop( ) { if (top_ptr == -1)if (top_ptr == -1) cout << “Error in pop-stack is empty\n”;cout << “Error in pop-stack is empty\n”; else top_ptr--;else top_ptr--;}}Type top( ) { return (stack_ptr[top_ptr]); }Type top( ) { return (stack_ptr[top_ptr]); }int empty() { return (top_ptr == -1); }int empty() { return (top_ptr == -1); }

}}

##include <iostream.h>include <iostream.h>template <class Type>template <class Type>class stack {class stack { private:private: Type *stack_ptr;Type *stack_ptr; int max_len;int max_len; int top_ptr;int top_ptr; public:public:

stack( ) { stack_ptr = new Type[100]; // stack( ) { stack_ptr = new Type[100]; // 생성자생성자 max_len = 99;max_len = 99; top_ptr = -1; top_ptr = -1; }}stack (int size) { stack (int size) { // // 생성자이면서 틀 매개변수생성자이면서 틀 매개변수 stack_ptr = new Type[size];stack_ptr = new Type[size]; max_len = size-1;max_len = size-1; top = -1; top = -1; }}~stack( ) { delete stack_ptr; }~stack( ) { delete stack_ptr; }void push (Type number) {void push (Type number) {

if (top_ptr == max_len)if (top_ptr == max_len) cout << “Error in push-stack is full\n”;cout << “Error in push-stack is full\n”; else stack_ptr[++top_ptr]=number;else stack_ptr[++top_ptr]=number;

}}void pop( ) {void pop( ) { if (top_ptr == -1)if (top_ptr == -1) cout << “Error in pop-stack is empty\n”;cout << “Error in pop-stack is empty\n”; else top_ptr--;else top_ptr--;}}Type top( ) { return (stack_ptr[top_ptr]); }Type top( ) { return (stack_ptr[top_ptr]); }int empty() { return (top_ptr == -1); }int empty() { return (top_ptr == -1); }

}}

• 매개변수 자료 추상화매개변수 자료 추상화• 매개변수 자료 추상화매개변수 자료 추상화

##include <iostream.h>include <iostream.h>class stack {class stack {private:private: int * stack_ptr;int * stack_ptr; int max_len;int max_len; int top_ptr;int top_ptr;public:public: stack( ) { // stack( ) { // 생성자생성자 stack_ptr = stack_ptr = newnew int [100]; int [100];

max_len = 99;max_len = 99;top_ptr = -1;top_ptr = -1;

}} ~stack( ) { ~stack( ) { deletedelete [ ] stack_ptr; }; [ ] stack_ptr; }; void push (int number) {void push (int number) { if (top_ptr == max_len)if (top_ptr == max_len) cout << “Error in push-stack is full\n”;cout << “Error in push-stack is full\n”; else stack_ptr[++top_pt] = number;else stack_ptr[++top_pt] = number; }} void pop( ) {void pop( ) { if (top_ptr == -1)if (top_ptr == -1) cout << “Error in pop-stack is empty\n”;cout << “Error in pop-stack is empty\n”; else top_ptr--;else top_ptr--; }} int top( ) { return (stack_ptr[top_ptr]); }int top( ) { return (stack_ptr[top_ptr]); } int empty( ) { return (top_ptr == -1); }int empty( ) { return (top_ptr == -1); }}}

##include <iostream.h>include <iostream.h>class stack {class stack {private:private: int * stack_ptr;int * stack_ptr; int max_len;int max_len; int top_ptr;int top_ptr;public:public: stack( ) { // stack( ) { // 생성자생성자 stack_ptr = stack_ptr = newnew int [100]; int [100];

max_len = 99;max_len = 99;top_ptr = -1;top_ptr = -1;

}} ~stack( ) { ~stack( ) { deletedelete [ ] stack_ptr; }; [ ] stack_ptr; }; void push (int number) {void push (int number) { if (top_ptr == max_len)if (top_ptr == max_len) cout << “Error in push-stack is full\n”;cout << “Error in push-stack is full\n”; else stack_ptr[++top_pt] = number;else stack_ptr[++top_pt] = number; }} void pop( ) {void pop( ) { if (top_ptr == -1)if (top_ptr == -1) cout << “Error in pop-stack is empty\n”;cout << “Error in pop-stack is empty\n”; else top_ptr--;else top_ptr--; }} int top( ) { return (stack_ptr[top_ptr]); }int top( ) { return (stack_ptr[top_ptr]); } int empty( ) { return (top_ptr == -1); }int empty( ) { return (top_ptr == -1); }}}

• C++C++ 에서의 자료 추상화에서의 자료 추상화• C++C++ 에서의 자료 추상화에서의 자료 추상화

Page 13: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

수학적 추상화 명세수학적 추상화 명세 ((algebraic specificationalgebraic specification))

자료형에 대한 일반적 형태의 정의는자료형에 대한 일반적 형태의 정의는 , , 속성속성 ((attribute)attribute) 을 갖는 서로 구별되는 여러 클래스들로 구성을 갖는 서로 구별되는 여러 클래스들로 구성

클래스클래스 11 : : 정의하고자 하는 새로운 자료형의 객체 표현을 위한 속성들로 정의하고자 하는 새로운 자료형의 객체 표현을 위한 속성들로 구성됨구성됨

클래스클래스 22 : : 기 정의된 연산을 이용하여 새로운 자료형에 필요한 연산을 기 정의된 연산을 이용하여 새로운 자료형에 필요한 연산을 구현구현

클래스클래스 n : n : 정의하고자정의하고자 하는 자료형의 또 다른 특징들 기술하는 자료형의 또 다른 특징들 기술 예예 )) 스택 구현 시스택 구현 시 ,,

클래스클래스 11 : : 스택 자료형을 배열로 표현 스택 자료형을 배열로 표현 클래스클래스 2 : 2 : 스택 연산 구현스택 연산 구현 ((push, pop push, pop 등등 )) 클래스클래스 n : n : 스택 연산과 관련된 특성 기술스택 연산과 관련된 특성 기술 ((last-in first-out last-in first-out 등등 ))

자료 추상화 지원 언어에서 이를 사용하는 특징자료 추상화 지원 언어에서 이를 사용하는 특징 (( 이유이유 ?)?) 자료 추상화 기법이 자료 추상화 기법이 강 자료형강 자료형 ((strongly typing)strongly typing) 을 지원함을 지원함

객체들에 적용되는 연산들의 타당성 검증하는 보증자 역할객체들에 적용되는 연산들의 타당성 검증하는 보증자 역할 안전한 호출 보장과 비밀 보장 지원안전한 호출 보장과 비밀 보장 지원 ((hidinghiding))

수학적 추상화 명세수학적 추상화 명세 ((algebraic specificationalgebraic specification))

자료형에 대한 일반적 형태의 정의는자료형에 대한 일반적 형태의 정의는 , , 속성속성 ((attribute)attribute) 을 갖는 서로 구별되는 여러 클래스들로 구성을 갖는 서로 구별되는 여러 클래스들로 구성

클래스클래스 11 : : 정의하고자 하는 새로운 자료형의 객체 표현을 위한 속성들로 정의하고자 하는 새로운 자료형의 객체 표현을 위한 속성들로 구성됨구성됨

클래스클래스 22 : : 기 정의된 연산을 이용하여 새로운 자료형에 필요한 연산을 기 정의된 연산을 이용하여 새로운 자료형에 필요한 연산을 구현구현

클래스클래스 n : n : 정의하고자정의하고자 하는 자료형의 또 다른 특징들 기술하는 자료형의 또 다른 특징들 기술 예예 )) 스택 구현 시스택 구현 시 ,,

클래스클래스 11 : : 스택 자료형을 배열로 표현 스택 자료형을 배열로 표현 클래스클래스 2 : 2 : 스택 연산 구현스택 연산 구현 ((push, pop push, pop 등등 )) 클래스클래스 n : n : 스택 연산과 관련된 특성 기술스택 연산과 관련된 특성 기술 ((last-in first-out last-in first-out 등등 ))

자료 추상화 지원 언어에서 이를 사용하는 특징자료 추상화 지원 언어에서 이를 사용하는 특징 (( 이유이유 ?)?) 자료 추상화 기법이 자료 추상화 기법이 강 자료형강 자료형 ((strongly typing)strongly typing) 을 지원함을 지원함

객체들에 적용되는 연산들의 타당성 검증하는 보증자 역할객체들에 적용되는 연산들의 타당성 검증하는 보증자 역할 안전한 호출 보장과 비밀 보장 지원안전한 호출 보장과 비밀 보장 지원 ((hidinghiding))

추상 자료형추상 자료형

Page 14: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

자료형의 수학적 추상화 명세자료형의 수학적 추상화 명세

자료형의 이상적인자료형의 이상적인 (( 수학적인수학적인 )) 추상화 기술 기법추상화 기술 기법 현존 언어에는 미 제공현존 언어에는 미 제공 , , 구현보다 설계에 유용구현보다 설계에 유용 새로운 언어 개발에 적용새로운 언어 개발에 적용

수학적 명세 수학적 명세 ((algebraic specification) - algebraic specification) - GuttagGuttag 자료형의 일반적 형태를 정의하는 것을 지원함자료형의 일반적 형태를 정의하는 것을 지원함

구문 명세 구문 명세 - - 자료형 이름자료형 이름 , , 연산연산 , , 연산의 매개 변수형 열거연산의 매개 변수형 열거 의미 명세 의미 명세 - - 연산 특성을 자료 표현과 독립적으로 대수 방정식을 이용하여 기술연산 특성을 자료 표현과 독립적으로 대수 방정식을 이용하여 기술 제한 명세 제한 명세 - - 연산 적용 전후의 조건들을 기술연산 적용 전후의 조건들을 기술 그럼으로서그럼으로서 , , 프로그램 간결성프로그램 간결성 (( 판독성 증가판독성 증가 , , 언어 사용 용이언어 사용 용이 ) ) 지원지원

수학적 명세 사용 언어의 구성 수학적 명세 사용 언어의 구성 (5(5 개의 기본 함수개의 기본 함수 )) 함수적 구성함수적 구성 ((function composition)function composition) 동등 관계동등 관계 논리 상수논리 상수 ((true, false)true, false) 무한 개의 자유 변수무한 개의 자유 변수 ∴ ∴ 기본 요소를 이용한 새로운 자료형 정의를 가능케 하여 언어를 확장시킴기본 요소를 이용한 새로운 자료형 정의를 가능케 하여 언어를 확장시킴

자료형의 수학적 추상화 명세자료형의 수학적 추상화 명세

자료형의 이상적인자료형의 이상적인 (( 수학적인수학적인 )) 추상화 기술 기법추상화 기술 기법 현존 언어에는 미 제공현존 언어에는 미 제공 , , 구현보다 설계에 유용구현보다 설계에 유용 새로운 언어 개발에 적용새로운 언어 개발에 적용

수학적 명세 수학적 명세 ((algebraic specification) - algebraic specification) - GuttagGuttag 자료형의 일반적 형태를 정의하는 것을 지원함자료형의 일반적 형태를 정의하는 것을 지원함

구문 명세 구문 명세 - - 자료형 이름자료형 이름 , , 연산연산 , , 연산의 매개 변수형 열거연산의 매개 변수형 열거 의미 명세 의미 명세 - - 연산 특성을 자료 표현과 독립적으로 대수 방정식을 이용하여 기술연산 특성을 자료 표현과 독립적으로 대수 방정식을 이용하여 기술 제한 명세 제한 명세 - - 연산 적용 전후의 조건들을 기술연산 적용 전후의 조건들을 기술 그럼으로서그럼으로서 , , 프로그램 간결성프로그램 간결성 (( 판독성 증가판독성 증가 , , 언어 사용 용이언어 사용 용이 ) ) 지원지원

수학적 명세 사용 언어의 구성 수학적 명세 사용 언어의 구성 (5(5 개의 기본 함수개의 기본 함수 )) 함수적 구성함수적 구성 ((function composition)function composition) 동등 관계동등 관계 논리 상수논리 상수 ((true, false)true, false) 무한 개의 자유 변수무한 개의 자유 변수 ∴ ∴ 기본 요소를 이용한 새로운 자료형 정의를 가능케 하여 언어를 확장시킴기본 요소를 이용한 새로운 자료형 정의를 가능케 하여 언어를 확장시킴

추상 자료형추상 자료형

Page 15: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

structure stack; structure stack; (( 구문명세 구문명세 )) newstack( ) → stacknewstack( ) → stack push(stack, item) → stackpush(stack, item) → stack pop(stack) → stackpop(stack) → stack top(stack) → itemtop(stack) → item isnew(stack) → booleanisnew(stack) → boolean declare stkdeclare stk :: stack, istack, i :: item; item; (( 의미명세의미명세 )) pop(push(stk, i)) = stkpop(push(stk, i)) = stk top(push(stk, i)) = itop(push(stk, i)) = i isnew(newstack( )) = trueisnew(newstack( )) = true isnew(push(stk, i) = falseisnew(push(stk, i) = false

restrictions restrictions (( 제한명세제한명세 )) pop(newstack( )) = errorpop(newstack( )) = error top(newstack( )) = errortop(newstack( )) = error

structure stack; structure stack; (( 구문명세 구문명세 )) newstack( ) → stacknewstack( ) → stack push(stack, item) → stackpush(stack, item) → stack pop(stack) → stackpop(stack) → stack top(stack) → itemtop(stack) → item isnew(stack) → booleanisnew(stack) → boolean declare stkdeclare stk :: stack, istack, i :: item; item; (( 의미명세의미명세 )) pop(push(stk, i)) = stkpop(push(stk, i)) = stk top(push(stk, i)) = itop(push(stk, i)) = i isnew(newstack( )) = trueisnew(newstack( )) = true isnew(push(stk, i) = falseisnew(push(stk, i) = false

restrictions restrictions (( 제한명세제한명세 )) pop(newstack( )) = errorpop(newstack( )) = error top(newstack( )) = errortop(newstack( )) = error

<< 표 표 1100 ..88 자료형 스택의 수학적 추상화 명세자료형 스택의 수학적 추상화 명세 >> << 표 표 1100 ..88 자료형 스택의 수학적 추상화 명세자료형 스택의 수학적 추상화 명세 >>

•자료형 이름자료형 이름•연산연산•연산의 매개변수형연산의 매개변수형

•연산의 특성 연산의 특성 (( 자료 표현과 독립적자료 표현과 독립적 ))

•연산의 조건 연산의 조건

추상 자료형추상 자료형

Page 16: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

structure structure queuequeue ;; newq( ) → queuenewq( ) → queue addq(queue, item) → queue addq(queue, item) → queue deleteq(queue) → queuedeleteq(queue) → queue frontq(queue) → itemfrontq(queue) → item isnewq(queue) → booleanisnewq(queue) → boolean

declare declare q, rq, r :: queue, iqueue, i :: itemitem ;; isnewq(newq) = trueisnewq(newq) = true isnewq(add(q, i)) = falseisnewq(add(q, i)) = false deleteq(newq) = newqdeleteq(newq) = newq deleteq(addq(q, i)) = deleteq(addq(q, i)) = if isnewq(q) then newq else addq(deleteq(q) , i)if isnewq(q) then newq else addq(deleteq(q) , i) frontq(addq(q, i) = if isnewq(q) then i else fromtq(q)frontq(addq(q, i) = if isnewq(q) then i else fromtq(q)

restrictionsrestrictions frontq(newq) = errorfrontq(newq) = error

structure structure queuequeue ;; newq( ) → queuenewq( ) → queue addq(queue, item) → queue addq(queue, item) → queue deleteq(queue) → queuedeleteq(queue) → queue frontq(queue) → itemfrontq(queue) → item isnewq(queue) → booleanisnewq(queue) → boolean

declare declare q, rq, r :: queue, iqueue, i :: itemitem ;; isnewq(newq) = trueisnewq(newq) = true isnewq(add(q, i)) = falseisnewq(add(q, i)) = false deleteq(newq) = newqdeleteq(newq) = newq deleteq(addq(q, i)) = deleteq(addq(q, i)) = if isnewq(q) then newq else addq(deleteq(q) , i)if isnewq(q) then newq else addq(deleteq(q) , i) frontq(addq(q, i) = if isnewq(q) then i else fromtq(q)frontq(addq(q, i) = if isnewq(q) then i else fromtq(q)

restrictionsrestrictions frontq(newq) = errorfrontq(newq) = error

추상 자료형추상 자료형

< 표 10.9 자료형 queue 의 수학적 추상화 명세 >< 표 10.9 자료형 queue 의 수학적 추상화 명세 >

ifthenelse(true, q, r) = qifthenelse(true, q, r) = qifthenelse(false, q, r) = rifthenelse(false, q, r) = r

if p then q else rif p then q else r

ifthenelse(true, q, r) = qifthenelse(true, q, r) = qifthenelse(false, q, r) = rifthenelse(false, q, r) = r

if p then q else rif p then q else r

Infix Infix 형태로 이름 지어 사용형태로 이름 지어 사용

<< 함수 함수 ifthenelse( ) ifthenelse( ) 정의정의 >><< 함수 함수 ifthenelse( ) ifthenelse( ) 정의정의 >>

Page 17: 소 개 추상화 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법 필수적인 속성만 표현(나머지는 숨기거나 삭제) 유사성만 표현

Programming Programming LanguagesLanguages

- The end of Chapter 10 - The end of Chapter 10 --

To Be Continue ...To Be Continue ...

Programming Programming LanguagesLanguages

- The end of Chapter 10 - The end of Chapter 10 --

To Be Continue ...To Be Continue ...