╱╱╭╮╱╱╱╱╱╱╭━━━╮╱╱╱╭╮╱╭╮╱╱╱╱╱╱ ╱╱┃┃╱╱╱╱╱╱┃╭━╮┃╱╱╱┃┃╱┃┃╱╱╱╱╱╱ ╱╱┃┣━━┳━━╮┃┃╱┃┣━╮╱┃╰━╯┣━━┳━╮╱ ╭╮┃┃╭╮┃┃━┫┃╰━╯┃╭╮╮┃╭━╮┃╭╮┃╭╮╮ ┃╰╯┃╭╮┃┃━┫┃╭━╮┃┃┃┃┃┃╱┃┃╭╮┃┃┃┃ ╰━━┻╯╰┻━━╯╰╯╱╰┻╯╰╯╰╯╱╰┻╯╰┻╯╰╯

CS/프로그래밍 언어론

[프로그래밍 언어론] Encapsulation - Abstract Data Types (7)

재안안 2024. 6. 20. 17:05

 

[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로 허용