클래스 베이스 프로그래밍

Class-based programming

클래스 기반 프로그래밍 또는 더 일반적으로 클래스 지향 프로그래밍(OOP)은 객체만을 통한 상속이 아니라 객체 클래스정의함으로써 상속이 발생하는 객체 지향 프로그래밍(OOP) 스타일입니다.

OOP의 가장 인기 있고 개발된 모델은 객체 기반 모델이 아닌 클래스 기반 모델입니다.이 모델에서 개체는 상태(즉, 데이터), 행동(절차 또는 방법) 동일성(다른 모든 개체 간의 고유한 존재)을 결합하는 개체입니다.개체의 구조 및 동작은 특정 유형의 모든 개체에 대한 정의 또는 Blueprint클래스에 의해 정의됩니다.오브젝트는 클래스를 기반으로 명시적으로 생성되어야 하며 이렇게 생성된 오브젝트는 해당 클래스의 인스턴스로 간주됩니다.오브젝트는 구조체와 유사하며 메서드 포인터, 멤버 액세스 제어 및 클래스 계층(런타임 상속 기능에 필수적인 클래스 오브젝트)의 인스턴스를 찾는 암묵적인 데이터 멤버를 추가합니다.

캡슐화

캡슐화는 사용자가 클래스의 불변성을 깨는 것을 방지합니다.이는 사용자 코드에 영향을 주지 않고 인터페이스에서 공개되지 않은 측면에 대해 오브젝트 클래스를 변경할 수 있기 때문에 유용합니다.캡슐화의 정의는 보안 문제보다는 관련 정보(코션)의 그룹화와 패키징에 초점을 맞추고 있습니다.

상속

클래스 기반 프로그래밍에서 상속은 새 클래스를 기존 클래스의 확장으로 정의함으로써 수행됩니다. 즉, 기존 클래스는 부모 클래스이고 새 클래스는 자식 클래스입니다.자식 클래스에 부모 클래스가 하나만 있는 경우 이를 단일 상속이라고 하며, 자식 클래스에 둘 이상의 부모 클래스를 가질 수 있는 경우 이를 다중 상속이라고 합니다.이렇게 하면 클래스가 트리(단일 상속인 경우) 또는 격자(복수 상속인 경우) 중 하나의 계층으로 구성됩니다.

상속의 정의 기능은 인터페이스와 구현이 모두 상속되는 것입니다.인터페이스만 상속되는 경우 이를 인터페이스 상속 또는 서브타이핑이라고 합니다.프로토타입 기반 프로그래밍에서처럼 클래스 없이 상속을 수행할 수도 있습니다.

클래스 기반 모델에 대한 비판

클래스 베이스 언어, 더 정확히 말하면 서브타이핑의 유일한 방법인 타이핑된 언어는 객체 지향 프로그래밍의 기본 원리인 구현과 인터페이스가 뒤섞인다는 비판을 받아 왔습니다.비평가들은 객체 컬렉션을 저장하는 가방 클래스를 만든 후 이를 확장하여 객체의 중복이 [1][2]제거되는 세트 클래스라고 불리는 새로운 클래스를 만들 수도 있다고 말한다.가방 클래스의 오브젝트를 가져가는 함수는 두 개의 오브젝트를 추가하면 가방의 크기가 두 개 증가할 것으로 예상할 수 있지만, 한 개가 세트 클래스의 오브젝트를 통과하면 두 개의 오브젝트를 추가하면 가방의 크기가 두 개 증가할 수도 있고 그렇지 않을 수도 있습니다.이 문제는 Liskov 대체 원리로 알려진 서브타이핑의 원리가 유지되지 않는 경우에도 서브타이핑을 의미하기 때문에 정확하게 발생합니다.Barbara LiskovJeannette Wing은 1994년 논문에서 다음과 같이 이 원칙을 간결하게 공식화했다.

서브타입 요건: let() { )를 x {\ x 대한 증명 가능한 속성으로 합니다 S {\y S의 y {\ S {\ S 대해 참이어야 합니다.pe T {\ T 입니다.

따라서 보통 서브타이핑과 서브클래싱을 구분해야 합니다.대부분의 현재 객체 지향 언어는 서브타이핑과 서브클래싱을 구분하지만 일부 설계 접근 방식은 그렇지 않습니다.

또 하나의 일반적인 예는 자녀 클래스와 부모 클래스는 개인 클래스를 상속하지만 클래스 기반 언어는 대부분 런타임에 객체의 종류를 변경할 수 없기 때문에 자녀 클래스에서 생성된 사용자 개체가 부모 클래스의 개체가 될 수 없다는 것입니다.클래스 기반 언어의 경우 사용자에게 클래스의 통일된 보기를 유지하려면 이 제한이 필수적입니다.사용자는 메서드의 구현 중 하나가 클래스의 불변성을 깨는 변경을 야기하는지 여부에 대해 신경 쓸 필요가 없습니다.이러한 변경은 객체를 파괴하고 그 자리에 다른 객체를 구축함으로써 이루어질 수 있습니다.오브젝트는 블랙박스 추상화로 표시되며 오브젝트 ID를 통해 접근하기 때문에 이러한 변경이 이루어진 경우에도 관련 인터페이스를 유지하기 위해 다형성을 사용할 수 있습니다.단, 일반적으로 오브젝트를 참조하는 오브젝트 참조의 값이 변경되어 클라이언트코드에 영향을 줍니다.

언어 예시

Simula가 클래스 추상화를 도입했지만 클래스 기반 언어의 표준 예는 Smalltalk입니다.그 외 PHP, C++, Java, C#, Objective-C 등이 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Kiselyov, Oleg. "Subtyping, Subclassing, and Trouble with OOP". Retrieved 7 October 2012.
  2. ^ Ducasse, Stéphane. "A set cannot be a subtype of a bag". Retrieved 7 October 2012.