1 / 19

제 11 장 추상 자료형

제 11 장 추상 자료형. 11.1 소개. 11.2 Ada 의 자료 추상화. 11.3 C++ 의 자료 추상화. 11.4 Java 의 자료 추상화. 11.5 수학적 추상과 명세. 자료 추상화. 11.1 소개. 자료 추상화 (data abstraction). 자료 캡슐화 (data encapsulation). 자료를 연산과 함께 선언. 정보 은닉 개념 => 프로그램 쉽게 읽고 유지 보수 용이. 추상화. 유사성 표현. 차이점 삭제 , 숨김. 자료 추상화. 자료 추상화.

stacia
Download Presentation

제 11 장 추상 자료형

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 제 11장 추상 자료형 11.1 소개 11.2 Ada의 자료 추상화 11.3 C++의 자료 추상화 11.4 Java의 자료 추상화 11.5 수학적 추상과 명세

  2. 자료 추상화 11.1 소개 자료 추상화 (data abstraction) 자료 캡슐화 (data encapsulation) 자료를 연산과 함께 선언 정보 은닉 개념 => 프로그램 쉽게 읽고 유지 보수 용이 추상화 유사성 표현 차이점 삭제, 숨김

  3. 자료 추상화 자료 추상화 자료형의 표현과 그에 관련된 연산들을 함께 묶어 캡슐화하는 기법 (class, package, structure 등등) 캡슐화 부적당한 사용으로부터 자료형 보완하기 위한 벽 Window 제공 공개부 (public part) 전용부 (private part) 방출 행위 : export 전용부 : import

  4. 자료 추상화 Queue 추상화 structure queue = operations ADDQ, DELETEQ, ISEMPTYQ representation ... end rep procedure ADDQ(...) . . . end ADDQ procedure DELETEQ(...) . . . end DELETEQ procedure ISEMPTYQ(...) . . . end ISEMPTYQ procedure NEXT(...) . . . end NEXT begin initialization code end end queue • <queue 구조> • 구성 • 1) 연산 이름 • 2) 자료형 표현 • 3) 연산 구현 • 4) 초기화 • operations • - 방출된 연산 • representation … end rep • - 큐의 표현 정의 • queue 형 변수 선언 • var x:queue • 참고 • NEXT : 방출되지 않음

  5. 자료 추상화 완성된 queue의 정의 procedure DELETEQ(q:queue) returns item:integer; if ISEMFTYQ(q) then QUEUEEMPTY else NEXT(front) item := q(front) endif end DELETEQ; procedure ISEMPTYQ(q:queue) returns flag:boolean; flag := front = rear end ISEMPTYQ; begin front := rear := 1 end; end queue structure = operations ADDQ,DELETEQ, ISEMPTYQ; representation integer array q(0:99); integer front, rear; end rep procedure NEXT(I:integer); i := (i + 1) mod 100 end NEXT; procedure ADDQ(p:queue, item:integer); NEXT(rear) iffront=rearthenQUEUFULL elseq(rear):=item endif endADDQ;

  6. 자료 추상화 11.2 Ada의 자료 추상화 단위 프로그램 subprogramm(procedure, function) package task

  7. 자료 추상화 package 자료 추상화 지원 구성 • 명세부 • ① 가시부 - with(자료 방출) , • use(도입된 이름의 한정자 생략) • ② 전용부 - 자료 방출 불허용 몸체부 - 연산(부 프로그램) 구현 참고 - 명세부, 몸체부의 변수 <- own 개념

  8. 자료 추상화 이진 트리 package 명세부, 몸체부 <명세부> package BSTREES is type BSTREEPTR is private; type BSTREE is private; function HAS(I:ITEM, P:BSTREEPTR) return BOOLEAN; procedure INSERT(ILITEM, in out P:BSTREEPTR ); function EQUAL(P, Q:BSTREEPTR) return BOOLEAN; private type BSTREEPTR; type BSTREE is record DATE:ITEM; LEFTCHILD:BSTREESPTR; RIGHTCHILD:BSTREEPTR; end record; type BSTREEPTR is access BSTREE; end;

  9. 자료 추상화 package body BSTREES is function HAS(I:ITEM,P:BSTREEPTR) return BOOLEAN is Q:BSTREEPTR; begin Q := P; loop if Q = null then return FALSE; elsif I < Q.DATA then Q := Q.LEFTCHILD; elsif I > Q.DATA then Q := Q.RIGHTCHILD; else return TRUE; end if; end loop; end HAS; procedure INSERT(I:ITEM, in out P:BSTREEPTR); --프로시저 INSERT의 기술 function EQUAL(P, Q:BSTREEPTR) return BOOLEAN; if P = null and Q = null then return TRUE; elsif P = null or Q = null then return FALSE; elsif P.DATA = Q.DATA then if EQUAL (P.LEFTCHILD, Q.LEFTCHILD) then return EQUAL (P.RIGHTCHILD, Q.RIGHTCHILD); else return FALSE; end if; else return FALSE; end if; end BSTREES; <몸체부>

  10. 자료 추상화 BSTREE 패키지 호출 declare use BSTREES; P,Q : BSTREEPTR; begin p := new BSTREE('A', null, null) INSERT('B', P); INSERT('Z', P); INSERT('H', P); end;

  11. 자료 추상화 포괄 패키지 (generic stack package) • 포괄 패키지(STACK 구현) • - 스택 크기와 원소형 매개변수화 • 연산 • PUSH(), POP() • 예외조건 • OVERFLOW, UNDERFLOW • 실체화 • package INTSTACK is new • STACK(SIZE =>100, ELEM=>INTEGER); • 사용 • declare • use INTSTACK; • X, Y:STACK; • ... • begin • PUSH(X, 175); • PUSH(Y, 82); • POP(X, I); • POP(Y, J); • end; generic SIZE:INTEGER; type ELEM is private; package STACKS is type STACK islimited private; procedure PUSH(S:in out STACK; E:in ELEM); procedure POP(S:in out STACK; E:out ELEM); OVERFLOW, UNDERFLOW : exception; private type STACK is record SPACE:array(1 .. SIZE) of ELEM; INDEX:INTEGER range 0 .. SIZE := 0; end record; end; package body STACKS is procedure PUSH(S:in out STACK; E:in ELEM) is begin if S.INDEX = SIZE then raise OVERFLOW; endif; S.INDEX := S.INDEX + 1; S.SPACE(S.INDEX) := E; end PUSH; procedure POP(S:in out STACK; E:out ELEM) is begin if S.INDEX = 0 then raise UNDERFLOW; endif; E := S.SPACE(S.INDEX); S.INDEX:= S.INDEX - 1; end POP; end STACKS;

  12. 11.3 C++ 에서의 자료 추상화 예 • #include <iostream.h> • class stack { • private: • int * stack_ptr; • int max_len; • int top_ptr; • public: • stack() { stack_ptr = new int [100]; • max_len = 99; • top_ptr = -1; } • ~stack() {delete [] stack_ptr; }; • void push (int number) { • if (top_ptr == max_len) • cout << “Error in push-stack is full\n”; • else stack_ptr[++top_pt] = number; • } • void pop() { • if (top_ptr == -1) • cout << “Error in pop-stack is empty\n”; • else top_ptr--; • } • int top() {return (stack_ptr[top_ptr]); } • int empty() {return (top_ptr == -1); } • }

  13. 스택 자료 추상화를 사용하는 예 void main() { int top_one; stack stk; stk.push(42); stk.push(17); stk.pop(); top_one = stk.top(); …. }

  14. (사용예) stack < int > stk(150); #include <iostream.h> template <class Type> class stack { private: Type * stack_ptr; int max_len; int top_ptr; public: stack() { stack_ptr = new Type[100]; max_len = 99; top_ptr = -1; } stack (int size) { stack_ptr = new Type[size]; max_len = size-1; top = -1; } ~stack() {delete stack_ptr;}; void push (Type number) { if (top_ptr == max_len) cout << “Error in push-stack is full\n”; else stack_ptr[++top_ptr]=number; } void pop() { if (top_ptr == -1) cout << “Error in pop-stack is empty\n”; else top_ptr--; } Type top() {return (stack_ptr[top_ptr]);} int empty() {return (top_ptr == -1);} } 표 10.7 C++ 에서 매개 변수 자료 추상화 예

  15. 11.4 Java 에서의 자료 추상화 예 import java.io.*; Class Stack_class { private int [] stack_ref; private int max_len, top_index; public Stack_class() { // A Constructor stack_ref = new int [100]; max_len = 99; top_index = -1; } public void push(int number) { if (top_index == max_len) System.out.println("Error in push stack is full"); else stack_ref [++top_index] = number; } public void pop() { if (top_index == -1) System.out.println("Error in pop-stack is empty"); else --top_index; } public int top() { return (stack_ref[top_index]); } public boolean empty() { return (top_index == -1); } }

  16. Java 에서 stack 클래스 사용예 public class Tst_Stack { public static void main(String[] args) { Stack_class myStack = new Stack_class(); myStack.push(42); myStack.push(17); System.out.println(" 17 is: " + myStack.top()); myStack.pop(); System.out.println(" 42 is: " + myStack.top()); myStack.pop(); myStack.pop(); // produces an error message } }

  17. 자료 추상화 11.5 수학적 추상화 명세 자료형의 이상적 추상 기술 현재 미제공 구현보다 설계 유용 미래 지향적 언어 개발 수학적 명세 구문 명세 : 자료형 이름, 연산, 연산의 매개 변수형 열거 의미 명세 : 연산 특성 기술 제한 명세 : 연산 적용 전후의 조건들 => 간결성

  18. <stack의 수학적 명세> structure stack; (구문명세 ) newstack( ) → stack push(stack, item) → stack pop(stack) → stack top(stack) → item isnew(stack) → boolean declare stk:stack, i:item; (의미명세) pop(push(stk, i) = stk top(push(stk, i) = i isnew(newstack( )) = true isnew(push(stk, i) = false restrictions (제한명세) pop(newstack( )) = error top(newstack( )) = error 자료 추상화 <함수 ifthenelse() 정의> ifthenelse(true, g, r) = q ifthenelse(false, q, r) = r if p then q else r Infix 형태

  19. <queue의 수학적 추상화 명세> structure queue; newq( ) → queue addq(queue, item) → queue deleteq(queue) → queue frontq(queue) → item isnewq(queue) → boolean declare q, r:queue, i:item; isnewq(newq) = true isnewq(add(q, i)) = false deleteq(newq) = newq deleteq(addq(q, i)) = if isnewq(q) then newq else addq(deleteq(q) , i) frontq(addq(q, i) = if isnewq(q) then i else fromtq(q) restrictions frontq(newq) = error 자료 추상화

More Related