Chapter 11
This presentation is the property of its rightful owner.
Sponsored Links
1 / 27

Chapter 11 – 추상 자료형 PowerPoint PPT Presentation


  • 163 Views
  • Uploaded on
  • Presentation posted in: General

Chapter 11 – 추상 자료형. Outline 11.1 소개 11.2Ada 의 추상 자료형 11.3C++ 의 추상 자료형 11.4Java 의 추상 자료형 11.5 수학적 추상화 명세. 11.1 소개. 자료추상화 , 자료캡슐화 자료를 연산과 함께 선언 정보 은닉 개념 도입 (readability 증가 ) 구현종류 : class, cluster, flavor, form, modula, package, structure... 추상화

Download Presentation

Chapter 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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Chapter 11

Chapter 11 – 추상 자료형

Outline

11.1소개

11.2Ada의 추상 자료형

11.3C++의 추상 자료형

11.4Java의 추상 자료형

11.5수학적 추상화 명세


Chapter 11 3412166

11.1 소개

  • 자료추상화, 자료캡슐화

    • 자료를 연산과 함께 선언

    • 정보 은닉 개념 도입(readability 증가)

    • 구현종류 : class, cluster, flavor, form, modula, package, structure...

  • 추상화

    • 일부 속성만으로 작업/객체들을 필요한 정도만 묘사하는 방법

    • 필수적인 속성만 표현(나머지는 숨기거나 삭제)

    • 유사성만 표현, 차이점 삭제

      관련된 사항을 묶어 하나로 표현

    • procedure - algorithm abstraction

      연산추상화 제공(what, not how)

    • 목적 - 추상화는 기계에서 일이 수행되는 구체적이고 상세한 것을

      모르고도 컴퓨터의 수행작업을 쉽게 이해하도록 해줌


Chapter 11 3412166

11.1 소개

  • 자료형

    • 객체들의 집합 + 객체에 작용하는 연산집합

    • 연산집합 : 실체화, 구축, 소멸, 분리 연산

  • 자료추상화(Data abstraction)

    • (자료형 표현 + 연산들) : 캡슐화

  • 추상 자료형(Abstract data type)


Chapter 11 3412166

11.1 소개

  • 캡슐화(Encapsulation) 은닉형, 캡슐형(encapsulated type)

    • 부적당한 사용을 배제하기 위한 보호막

      • 창문(windows) 제공 캡슐화된 정보 사용 가능

    • 구성

      • 공용부(public part), 가시부(visible part) : 창문 활용 방출

      • 전용부(private part) : 벽으로 보호

    • 방출(export)

      • 창문 활용한공개 행위

    • 도입(import)

      • 방출된 객체를 사용할 수 있도록 연결하는 행위

        사용 예) Modula, Euclid(module), Ada(package), Simula(class, 최초), CLU(cluster), ALPHARD(form)


Chapter 11 3412166

11.1 소개

  • 추상화 예) 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

  • - 방출된 연산 : ADDQ,

  • DELETEQ, ISEMPTYQ

  • - 방출되지 않은 연산 : NEXT

  • representation … end rep

  • - 큐의 표현 정의

  • <queue 형 변수 선언>

  • var x: queue


Chapter 11 3412166

11.1 소개

  • 완성된 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 queue =

operations DDQ, 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;


Chapter 11 3412166

11.1 소개

  • 자료 추상화 제공 시 고려 사항

    • 자료추상화 구문 형태는 ?

    • 영역 규칙과 생성된 객체의 생존기간은 ?

    • 초기화 또는 최종 마무리할 코드 세그먼트 허용 여부

    • 추상 자료형을 선언하여 여러 개의 실체 생성 여부

    • 추상 자료형 정의에 매개 변수화 사용 여부

    • 생성된 실체들 사이에 자료 공유 사용 여부


11 2 ada

11.2 Ada의 추상 자료형

  • Ada의 단위 프로그램 종류

    • Subprogram (procedure, function)

    • package자료추상화 지원

    • task

  • Package

    • 구성

      • 명세부

        ① 가시부 - 자료 방출

        with : 다른 package의 방출 자료 도입

        use : 도입된 이름의 한정자 생략

        ② 전용부 - 자료 방출 불허용

      • 몸체부

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

    • 참고

      명세부, 몸체부의 변수 <= own 변수 개념 (가시부의 부프로그램

      호출 시 변수의 이전 값이 남아 있음)


11 2 ada1

11.2 Ada의 추상 자료형

< package BSTREES 몸체부>

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

  • <package BSTREES 명세 선언>

packagebodyBSTREESis

functionHAS(I:ITEM,P:BSTREEPTR) returnBOOLEAN is

Q:BSTREEPTR;

begin

Q := P;

loop

ifQ=null thenreturnFALSE;

elsifI < Q.DATA thenQ := Q.LEFTCHILD;

elsifI > Q.DATA thenQ := Q.RIGHTCHILD;

else returnTRUE;

endif;

end loop;

end HAS;

procedureINSERT(I:ITEM,in outP:BSTREEPTR);

--프로시저 INSERT의 기술

function CBSTREE(I : ITEM) returnBSTREEPTR;

P : BSTREEPTR;

P := newBSTREE(I, null, null) ;

return P ;

end CBSTREE;

functionEQUAL(P,Q:BSTREEPTR) returnBOOLEAN;

ifP = null andQ = null thenreturnTRUE;

elsifP = null orQ = null thenreturnFALSE;

elsifP.DATA= Q.DATA then

ifEQUAL (P.LEFTCHILD,Q.LEFTCHILD) then

return EQUAL (P.RIGHTCHILD,Q.RIGHTCHILD);

elsereturnFALSE;

endif;

else returnFALSE;

end if;

endBSTREES;

packageBSTREESis

typeBSTREEPTRisprivate;

functionHAS(I:ITEM,P:BSTREEPTR) return BOOLEAN;

procedure INSERT(I : ITEM,in outP:BSTREEPTR);

functionEQUAL(P,Q:BSTREEPTR)return BOOLEAN;

functionCBSTREE(I : ITEM) returnBSTREEPTR;

private

typeBSTREEPTR;

typeBSTREEis

record

DATA:ITEM;

LEFTCHILD:BSTREESPTR;

RIGHTCHILD:BSTREEPTR;

endrecord;

typeBSTREEPTRisaccessBSTREE;

end;


11 2 ada2

11.2 Ada의 추상 자료형

<BSTREES 패키지 호출>

withBSTREES;

declare

useBSTREES;

P,Q:BSTREEPTR;

begin

P := CBSTREE('A') ;

INSERT('B',P);

INSERT('Z',P);

INSERT('H',P);

end;


11 2 ada3

11.2 Ada의 추상 자료형

  • 포괄 패키지

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:inout 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:inout 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사용

    • With INTSTACK

    • declare

    • use INTSTACK;

    • X, Y:STACK;

    • ...

    • begin

    • PUSH(X, 175);

    • PUSH(Y, 82);

    • POP(X, I);

    • POP(Y, J);

    • end;


11 3 c

11.3 C++의 추상 자료형

  • 객체 지향 프로그래밍 지원

    • 추상 자료형 지원 : 클래스(class) 제공

    • cf) C++의 클래스 : 자료형, Ada의 패키지, Modula-2의 모듈 : 자료형 X

  • 클래스 개념

    • 멤버 함수

      • 함수의 헤더(첫번째 줄)와 몸체부(함수가 하는 일을 정의한 문장들)로 구성

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

    • 생성자 (constructor)

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

    • 소멸자 (destructor)

      • 클래스 이름 앞에 ~ 기호를 붙여서 사용

      • 클래스 실체 소멸시 묵시적으로 호출

      • 할당된 힙 기억 장소 해제


11 3 c1

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_ptr] = 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);}

}


11 3 c2

11.3 C++의 추상 자료형

#include <iostream.h>

template <class Type>

classstack {

private:

Type * stack_ptr;

intmax_len;

int top_ptr;

public:

stack() { stack_ptr = new Type[100];

max_len = 99;

top_ptr = -1; }

stack (intsize) { stack_ptr = newType[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;

}

voidpop() {

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);}

}


11 4 java

11.4 Java의 추상 자료형

  • Java의 추상 자료형

    • C++의 추상 자료형과 매우 유사

  • C++과의 차이점

    • 모든 객체들은 힙에 할당 -> 참조형 변수를 통하여 접근

      Cf) C++ : 스택에 할당(멤버 데이타)

    • 부프로그램 -> 클래스 내에서만 정의(메소드)

    • 패키지

      • 클래스 상위 수준에 두 번째 캡슐화 구조인 패키지가 존재

      • 한 개 이상의 클래스 정의를 가짐

      • 패키지 내에서 각 클래스는 다른 클래스의 부분 프렌드


11 4 java1

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; }

publicvoid 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); }

}


11 4 java2

11.4 Java의 추상 자료형

< 스택 클래스 사용 예제 >

publicclass 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

}

}


Chapter 11 3412166

11.5 수학적 추상화 명세

  • 자료의 이상적인 추상화 기술 기법

    • 현존 언어에는 미 제공

    • 구현보다 설계에 유용

    • 새로운 언어 개발에 고무적

  • 자료형에 대한 일반적 형태의 정의

    • 속성(attribute)을 갖는 여러 클래스들로 구성(서로 구별)

      • 한 클래스 : 정의하고자 하는 자료형의 객체 표현을 위한 속성들

      • 다른 클래스들 : 이 자료형에 필요한 연산 구현을 위한 속성들

      • 다른 객체 이용 가능

    • 예) 스택

      • 한 클래스 : 스택 자료형 표현(배열)

      • 다른 클래스 : 스택 연산 구현(push, pop 등)

      • 또 다른 클래스 - 스택 연산과 관련된 특성 기술(last in first out 등)


Chapter 11 3412166

11.5 수학적 추상화 명세

  • 자료 추상화 특징

    • 강 자료형(strongly typing) 지원

    • 객체들에 적용되는 연산들의 타당성 검증

    • 안전한 호출보장과 비밀보장(hiding)

  • 수학적 명세(algebraic specification) - Guttag

    • 자료형의 일반적 형태의 정의 지원

    • 구문 명세 - 자료형 이름, 연산, 연산의 매개 변수형 열거

    • 의미 명세 - 연산 특성기술(대수 방정식) : 자료 표현과 독립적

    • 제한 명세 - 연산 적용 전후의 조건들

      간결성 (판독성 증가, 언어 사용 용이)

  • 수학적 명세 사용 언어 구성 (5개의 기본 요소)

    • 함수적 구성(function composition)

    • 동등 관계

    • 논리 상수(true, false)

    • 무한개의 자유 변수

      ∴새로운 자료형 정의(기본 요소 이용) 언어 확장


Chapter 11 3412166

11.5 수학적 추상화 명세

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

<함수 ifthenelse() 정의>

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(p, q, r) 의 의미

ifthenelse(true, q, r) = q

ifthenelse(false, q, r) = r

if p then q else r

Infix 형태


Chapter 11 3412166

11.5 수학적 추상화 명세

< 자료형 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


Chapter 11 3412166

슬라이드 쇼가 끝났습니다.


Chapter 11 3412166

용 어 정리


Abstract data type

추상 자료형 (abstract data type)


Encapsulated type

은닉형 (encapsulated type)


Private part

전용부 (private part)


Visible part

가시부(visible part)


  • Login