Abstract Data Types(이전 챕터 복습)
Abstract Data Types
- 사용자 정의 데이터 타입 T
- T에 적용 가능한 추상 연산(abstract operation)
- 타입 T 객체의 캡슐화(encapculation): 위에 정의된 연산을 제외한 다른 방법으로는 타입 T의 객체를 다룰 수 없음
주의
- 위 정의에서는 캡슐화와 정보은닉을 같은 것으로 다룸
- 은닉화는 외부에서 객체의 속성을 함부로 접근하지 못하도록 하는 것 일컫고, 캡슐화는 메서드 안에서 어떠한 일이 일어나고 있는지 모르게 해야한다는 것이다.
- 추상 연산(abstact operation)이란, 연산자의 인터페이스와 동작만 드러나 있을 뿐 "구현"이 드러나 있지 않은 연산을 말함
C++에서의 클래스
C++에서는 class를 통해 ADT(추상화 데이터 타입)를 구현
- 데이터 공간 <- 멤버 변수
- 추상 연산자 <- 멤버 함수
C++로 작성된 rational 타입
Generic Data Type
Generic Type
- "타입"을 인수로 받는 "타입"
- 후자의 타입은 전자의 타입을 통해 생성된(generated) 타입
- 타입 인수(type parameter)를 받으므로 parameteric polymorphism을 형성
Instantiation of a Generic Type
- Generic Type에 타입 인수를 전달함으로써 새로운 타입을 만드는 것
구현
- 타입 인수는 컴파일 시간에 결정된다.
- 따라서 인수가 결정되면 일반 타입과 동일하게 구현 가능
Inheritance
일반적 의미의 Inheritance
- 한 프로그램 요소의 특징이 다른 프로그램 요소로 전달되는 것
- 감싸고 있는 블록의 변수 이름을 내부 블록에서 볼 수 있는 것도 Inheritance의 일종이라고 보기도 함
ADT 관점의 Inheritance
- 한 ADT를 보다 구체화하여 다른 ADT를 만드는 것
- superclass, subclass 관계를 형성(subtype관계를 형성)
- subclass는 superclass의 모든 속성을 상속받음
Inheritance의 구현 예
- Ada의 tagged record
- C++의 derived class
- Java의 subclass
Inheritance in Ada
Inheritance in C++
구현 이슈
Multiple Inheritance
- 여러 superclass를 둘 수 있는가?
- diamond inheritance -> base class의 여러 copy 문제 발생(virtual class)
Dynamic Invocation(호출) of Methods
- method는 객체에 따라 호출되어야 함(객체마다 맞는 기능을 해야함, ex.클래스이름반환함수등)
- 메시지 수신 객체에 따라 호출되는 메소드가 달라짐 -> C++ 의 virtual function
Abstract clss
- 극도로 추상화된 클래스는 객체를 생성할 수 없음
- 서브클래스에서 생성된 객체들에 대한 인터페이스만을 나타내기 위해 사용됨
- pure virtual class in C++
Method Invocation의 예시
- 해결법1
- 메소드 재정의
- e.g. void MyType(){printf("I am type NewStack₩n")}
- 해결법2
- virtual 함수 사용
- e.g. virtual void TypeName() {printf(“ElemStack\n”)};
void MyType() {printf(“I am type” , TypeName()} In class NewStack,
virtual void TypeName() {printf(“NewStack \n”)} - C++에서 가상 함수(virtual function)는 파생 클래스에서 재정의할 것으로 기대하는 멤버 함수를 의미합니다. 이러한 가상 함수는 자신을 호출하는 객체의 동적 타입에 따라 실제 호출할 함수가 결정됩니다. C++에서 가상 함수는 virtual 키워드를 사용하여 선언합니다. 상속하는 클래스에서 정의를 해서 사용해야 함
Polymorphism(다형성)
Ad-hoc Polymorphism(임시 다형성)
- 실제로는 다른 코드지만 같은 이름으로 사용함
- Overloading
Parametric Polymorphism(타입인수 다형성, 제네릭)
- 여러 타입에 대해 동일하게 적용되는 코드
- 타입 인수를 받음: generic modules
Subtype Polymorphism(서브타입 다형성)
- "S IS-A T" 관계가 성립할 때, T(superclass)에 적용 가능한 코드는 S(subtype)에도 적용 가능함
- Pure Polymorphism
'Computer Science > 프로그래밍언어론' 카테고리의 다른 글
Chapter9 Subprogram Control (0) | 2023.06.15 |
---|---|
Chapter8 Sequence Control (0) | 2023.06.15 |
Chapter6 Encapsulation (0) | 2023.06.13 |
Chapter5-2 Structured Data Types (0) | 2023.06.12 |
Chapter5-1 Elementary Date Types (0) | 2023.04.20 |