[6] Encapsulation - Abstract Data Types
Abstract Data Types
- Abstraction : Making it simpler
- Encapsulation : Making them into one unit
- Information Hiding : Hiding the details
- 추상화, 캡슐화, 정보은닉은 밀접한 연관이 있다
- Encapsulation is a language facility
- Whereas information hiding is a design principle.
- Encapsulation refers th the bundling of data with the methods that operate on that data.
- The primary ceriteria for system modularization should concern the hiding of critical design decisions.
Abstract Data Types
- Abstract Data Type도 타입이다. (Value Set + operation Set)
- 다만 operation의 구현과 저장형태(value) 구현이 드러나지 않음.
- Abstract Data Type은 value와 operation을 묶을 수 있도록 해야하고, 구현 세부사항을 숨기도록 설계 해야한다.
- Algebraic data type인 경우가 많다
@Algebraic Data Type
- 해당 데이터 타입에 적용 가능한 연산자들 사이에 특정 대수적 법칙이 만족됨
Information Hiding
- 객체가 어떻게 저장되어야 하는지 알 수 없으며, 알 필요도 없다
- 중요한 것은 함수들의 동작형태이다
- 인터페이스와 무관한 부분을 숨기는 설계 기법
Subprograms as Abstract Operations
- Built-in types & built-in operations
- Libraries
- User-defined Data Types & User-defined operations(subprogram)
@Subprogram
- 구현되어 있지 않은 연산
- 특정 User-defined data type과 연관될 경우 abstract data type의 연산자로 볼 수 있다.
- 함수 : return value를 이용 (user-defined operators)
- 프로시저 : side-effect를 활용 (user-defined statements)
Subprogram Specification
- 이름 (name)
- 시그니처 (return type + parameter profile)
- 몸통 (action)
Subprogram Storage
- 정적인 부분과 동적인 부분들 구별해서 저장하고 실행시간에는 동적인 부분만 관리
- Code, static data -> static segment
- Parameters, local data -> dynamic segment
Activation Records
- 서브프로그램과 연관된 동적 데이터를 관리하는 구조체
- 서브프로그램이 실행될 경우에만 생성된다
- Parameters, local variables
- Noncode part of an executin subprogram
@Activation record for function
- Stack pointer
- Frame pointer
- Return address
- Static link
- Dynamic link
- Function result data
- Parameter
- Local data object
Stack Frame
- 함수 호출 후 반드시 복귀
- 가장 최근에 호출된 순으로 복귀
- Activetion record 하나를 stack frame이라고 한다
Accessing Local Data
- 함수의 active record의 프레임 포인터 값을 계산해서 접근
- 접근할 데이터 항목의 offset을 이용해 l-value 획득
General Semantics of Call and Return
- Subprogram call and return together are called subprogram linkage
@Subprogam Call Actions
- Parameter passing mechanism
- Storage for locals
- Saving the execution status of calling program unit
- Transfer control to the subprogram
- Mechansm for accessing nonlocals
@Subprogram Return Actions
- Move local values to paremeter on pass-by-reference
- Deallocate storage for locals
- Return mechanism for nonlocals
- Return the control to calling program unit
Implementing Simple Subprograms
- Pass-by-reference
- No recursion
- Referencing nonlocals through COMMON
- Variables are statically allocated
- No more than one activation record instance at any given time
@Simple Subprograms Call semantics
- Save the execution status of the caller
- Carry out the parameter-passing process
- Pass the return address
- Transfer control to the callee
@Simple Subprograms Return Semantics
- If pass-by-value-result parameters are used, move the current values to their correspondings parameters
- If it is a function, move functional value to a place the caller can get
- Restore the execution status of the caller
- Transfer control back to the caller
@Simple Subprogram Storage
- Status information of caller, parameters, return address, and functional value
- Store all local subprogram data with the subprogram code
@Simple Subprogram with Stack-Dynamic Local Variables
- Activation record format is static, but size may be dynamic
- Dynamic link points to the top of caller's activation record instance
- Activation record instance is dynamically created when a subprogram is called
Recursion
- 스택을 통해
Lifetime and Scope
- 지속시간 (session)
- 가시영역 (section)
Scope Hole
- 지역변수의 scope에 의해 가려지는 비 지역변수의 scope
Terminologies
- Lifetime에 따른 변수의 분류 (static vs. dynamic)
- Allocation 방법에 따른 변수의 분류 (static, automatic, dynamic)
Type Safety
- 타입 안전성 : 타입 범위 외의 값을 해당 타입의 값으로 취급을 허용하지 않음
- 타입 검사 : 타입 안전성을 검사
Granularity of Typing
- Strongly Typed
- Weakly Typed : 어떤 경우에 타입 오류가 검출안됨
- Typeless
Type Checking Time
- Static Type Checking : 수행 전 타입 검사를 완료
- Dynamic Type Checking : 수행 중 타입 descriptor를 통한 타입 검사
Equality
- Data equality : 두 데이터가 같다
- Type equivalence : 두 타입이 같다
@Data Equality
- Atomic data : 비트 패턴이 같으면 동일
- Structured data : 대응하는 구성 원소가 같으면 동일
@Type Equivalence
- Name equivalence : 이름이 같으면 동일
- Structural Equivalence : 구조가 같으면 동일
Subtle Questions
- Field names and sequence in Records
Parameterized Type
- Generic type
- Type을 parameter로 허용
'CS > 프로그래밍 언어론' 카테고리의 다른 글
[프로그래밍 언어론] Sequence Control (9) (0) | 2024.06.20 |
---|---|
[프로그래밍 언어론] Inheritance (8) (0) | 2024.06.20 |
[프로그래밍 언어론] Structured Data Types (6) (0) | 2024.04.25 |
[프로그래밍 언어론] Elementary Data Types (5) (0) | 2024.04.25 |
[프로그래밍 언어론] Modeling Language Properties (4) (0) | 2024.04.25 |