1 / 17

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

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

carl
Download Presentation

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

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

  2. 추상 자료형 • 자료형 = 객체들의 집합 + 객체들에 작용하는 연산집합(실체화, 구축, 소멸, 분리 연산) • 자료 추상화(Data Abstraction) • (자료형 표현 + 연산들) : 캡슐화 • 캡슐화(encapsulation) • 부적당한 사용을 배제하기 위한 보호막 ∴ 창문(windows) 제공  캡슐화된 정보 사용 • 구성 • 공개부(public part) 또는 가시부(visible part) • 전용부(private part)  방출(export)과 도입(import) • Modula, Euclid  module • Ada  package • Simula  자료 추상화 개념으로 class,최초 도입함 • CLU  cluster, ALPHARD  form

  3. 추상 자료형 • 다음 2가지 조건을 만족하는 자료형 • 자료를 연산과 함께 선언 (자료추상화 : data abstraction) • 정보 은닉 개념 도입 (자료캡슐화 : dataencapsulation) • 구현 종류 : class, cluster, flavor, form, modula, package, structure ... • 언어 설계의 요구조건인 modifiability, reusability, safety(보안), readability … 만족 • 추상화 제공시 고려 사항 • 자료 추상화 구문 형태는? • 영역 규칙과 생성된 객체의 생존기간은 ? • 초기화 또는 최종 마무리할 코드 세그먼트 허용 여부 • 추상 자료형을 선언하여 여러 개의 실체화 생성 여부 • 추상 자료형 정의에 매개 변수화 사용 여부 • 실체화들 사이에 자료 공유 사용 여부

  4. Queue 구조 (structure 개념 사용) 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 - 방출된 연산 : ADDQ, DELETEQ, ISEMPTYQ - 방출되지 않은 연산 : NEXT • representation … end rep - 큐의 표현 정의 <queue 형 변수 선언> var x:queue 추상 자료형

  5. 완성된 Queue 구조 structure queue = 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) if front = rear then QUEUFULL else q(rear) := item endif end ADDQ; procedure DELETEQ(q:queue) returns item:integer; if ISEMFTYQ(q) then QUEUEEMPTY else NEXT(front) item := q(front) end if end DELETEQ; procedure ISEMPTYQ(q:queue) returns flag:boolean; flag := front = rear end ISEMPTYQ; begin front := rear := 1 end; end queue 추상 자료형

  6. 추상 자료형 • Ada의 자료 추상화 • Ada의 단위 프로그램 종류 • subprogram(procedure, function) • package 모듈 프로그램이면서 자료추상화 지원 • Task  모듈 프로그램이면서 병행성 지원 • Package • 구성 1) 명세부 ① 가시부– 자료(연산 이름과 자료형 이름) 방출 또는 도입 with : 다른 package로 자료 방출, use : 도입된 이름의 한정자 생략하여 사용 ② 전용부 - 자료 방출 불허용, 자료형의 구체적인 표현 정의 2) 몸체부 - 연산(부프로그램) 구현 • 특징 : 명세부, 몸체부의 변수 : own 변수 개념으로 가시부의 부 프로그램 호출 시 변수의 이전 값이 남아 있음 (정적변수 특성)

  7. 이진 트리 package 명세부, 몸체부 < package BSTREES 몸체부> <package BSTREES 명세 선언> 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: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; package BSTREES is type BSTREEPTR 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; 추상 자료형

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

  9. 추상 자료형 • 포괄 패키지 추상 자료형 (표 10.5 generic stack package) generic SIZE:INTEGER; type ELEM is private; package STACKS is type STACK is limited 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; • 포괄 패키지(STACK 구현) - 스택 크기와 원소형 매개변수화 - 매개변수 추상 자료형 • 연산 PUSH( ), POP( ) • 예외조건 OVERFLOW, UNDERFLOW • 실체화 (크기가 100인 정수형 스택 package 생성) package INTSTACK is new STACKS(SIZE =>100, ELEM=>INTEGER); • 생성된 package사용 declare use INTSTACK; X, Y:STACK; ... begin PUSH(X, 175); PUSH(Y, 82); POP(X, I); POP(Y, J); end;

  10. 추상 자료형 • C++의 자료 추상화 • 객체지향 프로그래밍 지원 • 자료 추상화 지원 : 클래스(class)제공 cf)Ada : 패키지를 사용하여 캡슐화하고 추상화 지원 • 클래스 개념 • 클래스의 실체 (instances) • 객체의 선언으로 생성 • 실체화 시킨 선언문의 영역에서 벗어날 때 소멸(스택 변수로 한정) • 데이터 멤버 : 클래스에서 정의된 자료 • 멤버함수 : 클래스에서 정의된 함수 • 한 클래스의 모든 실체(객체)들은 하나의 멤버 함수 집합 공유하며, 각자 자신의 클래스 데이터 멤버의 집합 소유 • 참고 클래스는 힙 변수적 데이터 멤버 소유 가능 (new, delete 지원)

  11. 추상 자료형 • 멤버 함수 (member function) • 함수의 header(함수명 정의)와 body(프로그램 routine 문장들)로 구성 • 클래스 내에서 인라인(inline)됨 • 생성자 (constructor) • 객체를 생성할 때 필요한 매개 변수의 제공과 초기화 기능 • 소멸자 (destructor) • 클래스 이름 앞에 ‘~’ 기호를 붙여서 사용 • 클래스 실체 소멸시 묵시적으로 호출 • 할당된 힙 기억 장소 해제

  12. 추상 자료형 • 매개변수 자료 추상화 #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); } } • 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. 추상 자료형 • 수학적 추상화 명세(algebraic specification) • 자료형에 대한 일반적 형태의 정의는, • 속성(attribute)을 갖는 서로 구별되는 여러 클래스들로 구성 • 클래스1 : 정의하고자 하는 새로운 자료형의 객체 표현을 위한 속성들로 구성됨 • 클래스2 : 기 정의된 연산을 이용하여 새로운 자료형에 필요한 연산을 구현 • 클래스n : 정의하고자하는 자료형의 또 다른 특징들 기술 • 예)스택 구현 시, • 클래스1 : 스택 자료형을 배열로 표현 • 클래스2 : 스택 연산 구현(push, pop 등) • 클래스n : 스택 연산과 관련된 특성 기술(last-in first-out 등) • 자료 추상화 지원 언어에서 이를 사용하는 특징(이유?) • 자료 추상화 기법이 강 자료형(strongly typing)을 지원함 • 객체들에 적용되는 연산들의 타당성 검증하는 보증자 역할 • 안전한 호출 보장과 비밀 보장 지원(hiding)

  14. 추상 자료형 • 자료형의 수학적 추상화 명세 • 자료형의 이상적인(수학적인) 추상화 기술 기법 • 현존 언어에는 미 제공, 구현보다 설계에 유용 • 새로운 언어 개발에 적용 • 수학적 명세 (algebraic specification) - Guttag • 자료형의 일반적 형태를 정의하는 것을 지원함 • 구문 명세 - 자료형 이름, 연산, 연산의 매개 변수형 열거 • 의미 명세 - 연산 특성을 자료 표현과 독립적으로 대수 방정식을 이용하여 기술 • 제한 명세 - 연산 적용 전후의 조건들을 기술 • 그럼으로서, 프로그램 간결성(판독성 증가, 언어 사용 용이) 지원 • 수학적 명세 사용 언어의 구성 (5개의 기본 함수) • 함수적 구성(function composition) • 동등 관계 • 논리 상수(true, false) • 무한 개의 자유 변수 ∴ 기본 요소를 이용한 새로운 자료형 정의를 가능케 하여 언어를 확장시킴

  15. <표 10.8 자료형 스택의 수학적 추상화 명세> 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 • 자료형 이름 • 연산 • 연산의 매개변수형 • 연산의 특성 (자료 표현과 독립적) • 연산의 조건 추상 자료형

  16. ifthenelse(true, q, r) = q ifthenelse(false, q, r) = r if p then q else r Infix 형태로 이름 지어 사용 추상 자료형 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 <표 10.9 자료형 queue의 수학적 추상화 명세> <함수 ifthenelse( ) 정의>

  17. Programming Languages- The end of Chapter 10 -To Be Continue ...

More Related