2011-01-16 1 views
1

C++로 작성된 상상의 스크립트 언어에 대한 상상의 유형 시스템이 있고 스크립트 언어의 각 유형 (및 객체)이 기본 구현 언어에 해당 유형 (및 객체)을 가지고 있다고 가정합니다. 이 가상 유형 시스템의 기본 클래스는 Object라는 클래스이며 다른 모든 클래스는이 클래스에서 파생되어야합니다. 이제는 HashTable이라는 또 다른 클래스가 있습니다.이 클래스는 모든 변수 저장소의 기초입니다. (내가 잘못 말했을 수도 있습니다.) 네임 스페이스는 HashTables (하나의 객체를 다른 객체와 연결)를 통해 구현되고, 전역 변수는 HashTables를 통해 저장되며, 문제의 핵심 인 인스턴스 변수는 HashTable에도 저장됩니다.객체 지향형 시스템을 가진 언어로 객체 지향형 시스템을 구현할 수 있습니까?

인스턴스 변수는 모든 개체가 해당 인스턴스 변수를 저장하는 HashTable을 갖도록되어 있습니다. 그러나 HashTable은 반드시 Object에서 파생되므로 각 HashTable에는 인스턴스 변수를 저장하는 HashTable이 있습니다. 그리고 모든 HashTable에 대한 모든 HashTable에는 해시 테이블이 있으며, 무한히 확장 가능합니다.

제 질문은이 유형의 시스템을 기본 C++ 코드에서 객체 지향적 방식으로 구현할 수 있습니까? 예방 조치가 취해지지 않으면, 프로그램은 무한 루프에 들어가서 객체의 단순한 인스턴스 생성시 스택 오버 플로우를 야기 할 것이다. HashTable을 인스턴스화 할 Object를위한 부모 생성자를 호출 할 HashTable을 인스턴스화 할 것이기 때문에 ...

이 디자인 결함에 대해 원하는 OO 디자인을 위반하지 않는 가능한 해결 방법이 있습니까 (각 유형은 기본 코드에 해당 유형이 있습니다)?

이 게시물의 문법을 용서하십시오. 영어는 제 첫 번째 언어가 아니며 이해할 수있는 방식으로 설명하지 않았을 수 있습니다.

+0

질문 : "객체 지향 프로그래밍 언어로 객체 시스템을 시뮬레이션하려면 어떻게해야합니까? 아마도 해시 테이블을 사용합니까?" – umlcat

답변

0

은 Object에서 파생 된 사용자 코드 (UserHashTable)와 "모든 것이 객체"규칙을 위반하지 않고 유형 시스템을 구현하는 내부 용도 (CoreHashTable)의 두 가지 HashTable 유형을 구현합니다.

[편집] CoreHashTable은 자동으로 UserHashTable로 변환 될 수 있습니다. UserHashTable은 CoreHashTable에 대한 내부 스마트 포인터를 포함 할 수 있습니다.

+0

스크립트 언어가 인스턴스 변수를 직접 저장하는 HashTable (중개 조치 없음)에 액세스 할 수 있어야하므로 언어가 사용할 수있는 일반 HashTable과 동일한 유형이어야하므로 스크립트 언어가 작동 할 것인지 확신 할 수 없습니다. 그것. – Sergei

+0

CoreHashTable은 데이터를 복사하지 않고도 효율적으로 UserHashTable로 변환 할 수 있습니다. 내 원래 게시물을 확장합니다 ... –

0

예. 다른 프로그래밍 언어로 자신의 "객체 시스템"을 에뮬레이션 할 수 있습니다.

그 개념을 "가상 객체 시스템"이라고합니다.

O.O. 프로그래밍 언어에는 자체 "객체 시스템"이 있습니다. "객체 시스템"으로, "O.O. 라이브러리 또는 O.O. 클래스 계층"을 의미하지는 않습니다. "객체 시스템"이란 클래스와 객체를 선언하고 사용하는 방법을 의미합니다.

그러나 때로는 프로그래밍 언어가 객체 지향이 아니거나 객체 지향적 인 경우에도 일부 항목이 누락되었습니다. C#과 Java는 실제 속성이 없습니다 & 이벤트, C# 및 오브젝트 파스칼 않습니다.

O.O. 많은 프로그래머가 비 O.O.를 사용합니다. 프로그래밍 언어 및 O.O에 대해 배웁니다. 일부는 "C"를 "C++"전 처리기 (Objective-C 어쩌면)로 만들고, 일부는 전체 컴파일러를 수행했습니다.

그리고 일부는 에뮬레이트됩니다. 프로그래머는 개념적으로 생각하면서 클래스와 객체를 사용했지만 코드에서는 구조체 & 포인터를 사용합니다.

클래스 또는 객체 그룹이 다른 프로그래밍 언어로 시뮬레이션되는 몇 가지 "가상 객체 시스템"을 보았습니다.

일단, 나는 개발자가 "데이터베이스", "테이블", "필드"와 같은 개체로 데이터를 읽고 쓸 "볼랜드 데이터베이스 엔진"이라는 데이터베이스 conectivity 도구로했다.

GNI/Linux 용 GNome 시각적 인터페이스에서 사용되는 GLib 라이브러리 ("GObject"는 루트 객체)가 유명합니다. 이것은 "plain C"에서 수행되지만 포인터를 사용하여 객체와 클래스를 시뮬레이트합니다.

추가 정보 : http://en.wikipedia.org/wiki/Gobject

당신은 개념적으로 말하는 객체의 그룹을 사용하기를 원하지만 코드에서, 당신은 당신의 개념 클래스의 클래스 선언을하지 않지만, 해시 테이블에 저장된 일부 데이터, 다른 OO 사용 프로그래밍 언어. 예, 할 수 있습니다.