C에는 객체로 간주 될 수있는 'structs'와 같은 자체 준 객체가있는 것 같습니다
여러분과 함께 객체 지향 프로그래밍에 대한 Wikipedia 페이지를 읽고 전통적으로 객체 지향 스타일로 간주되는 것에 해당하는 C 스타일 구조체의 기능을 확인하십시오.
(OOP)는 "개체"를 사용하는 프로그래밍 패러다임 – 상호 작용과 함께 데이터 필드 및 방법으로 구성된 데이터 구조
C 구조체 는 상호 작용과 함께 필드 와 메서드 로 구성 됩니까? 아니.
프로그래밍 기술은 데이터 추상화, 캡슐화, 메시징, 모듈성, 다형성 및 상속과 같은 특징을 포함 할 수있다.
C 구조체는 "일등"방식으로 이러한 작업을 수행합니까? 아닙니다. 언어는 모든 단계에서 당신에게 불리하게 작용합니다.
객체 지향 접근 방식은 프로그래머가 나머지 프로그램에서 직접 액세스 할 수없는 곳에 데이터를 배치하도록 권장합니다.
C 구조체가 이것을합니까? 아니.
객체 지향 프로그램은 일반적으로 서로 다른 유형의 객체를 포함하며, 각 유형은 관리해야 할 특정 종류의 복잡한 데이터 또는 실제 객체 또는 개념에 해당합니다.
C 구조체가 이것을합니까? 예.
객체는 데이터를 적절하게 사용하도록 설계된 일련의 함수 내에 데이터를 래핑하는 것으로 생각할 수 있습니다.
아니.
각 객체는 메시지를 수신하고, 데이터를 처리하고, 다른 객체로 메시지를 보낼 수 있습니다.
구조체 자체가 메시지를주고받을 수 있습니까? 아니요. 데이터를 처리 할 수 있습니까? 아니.
OOP 데이터 구조는 "자신의 연산자를 가지고 다니는"경향이 있습니다
이것이 C에서 발생합니까? 아니.
동적 디스패치 ... 캡슐화 ... 하위 유형 다형성 ... 객체 상속 ... 개방형 재귀 ... 객체 클래스 ... 클래스 인스턴스 ... 연결된 객체에 작용하는 메소드 ... 메시지 전달 .. 추상화
C 구조체의 이러한 기능이 있습니까? 아니.
정확하게 어떤 객체의 특성이 "객체 지향"이라고 생각하십니까? 내가 찾을 수 없기 때문에 어떤 구조체 정의는 사실 이외의 다른 유형을 .
물론 함수에 대한 포인터 인 필드를 가진 구조체를 만들 수 있습니다. 가상 메소드 테이블에 해당하는 함수 포인터 배열에 대한 포인터 필드를 구조체에 만들 수 있습니다. 등등. 물론 C에서 C ++를 에뮬레이트 할 수 있습니다 . 그러나 C에서 프로그래밍하는 것은 비 아이디어적인 방법입니다. C ++를 사용하는 것이 좋습니다.
또한 C 파일 자체는 기본적으로 별도의 "모듈"입니다. 그렇다면 모듈도 '객체'와 비슷하지 않습니까?
다시 말하지만, 모듈의 어떤 특성이 그것들을 객체처럼 행동하게 만드는가? 모듈이 추상화, 캡슐화, 메시징, 모듈화, 다형성 및 상속을 지원합니까?
추상화와 캡슐화는 매우 약합니다. 분명히 모듈은 모듈 식입니다. 이것이 바로 모듈이라고하는 이유입니다. 메시지? 메소드 호출은 메시지이고 모듈은 메소드를 포함 할 수 있다는 점에서만 의미가 있습니다. 다형성? 아니. 계승? 아니. 모듈은 "객체"에 대한 매우 약한 후보입니다.