· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Объектное программирование...

. 1 . 2 . 3 . 4 . >>

Посл.отвђт Сообщенiе


Дата: Авг 26, 2003 20:06:31

Здорово!
Слышал на ASM можно реализовать принципы объектного программирования.
Может, кто расскажет или почитать где...
А то надо очень...


Дата: Авг 26, 2003 20:12:19


Дата: Авг 27, 2003 05:40:20

Quantum
That OOP you mentioned... I have looked at it, because I needed the principle in IDE I am developing. The problem is that objects are adding (and overriding) methods INSIDE of the object itself (where 'this' pointer points). That is not only waste of CPU, but also waste of room. If I have a form with 1000 fields on it - every field will repeat its method table 1000 times - per instance count!!
===
The object instance (where 'this' pointer points) should have a virtual method table address as a DWORD attached to it and VMT should be single VMT and not a 1000 copies.
===
Static methods for an object should not be in a table at all, but just a functions with a prefix, like:

xxiHeap_Allocate

that means method named Allocate() for a class named xxiHeap. Same naming convention goes for virtual methods, but they just attached to VMT statically, like:
xxiWnd_Vtbl_Impl  Dd  <xxiWnd_OnWmPaint, \
                       xxiWnd_OnWmClose, \
                       xxiWnd_OnWmCommand, \
                       xxiWnd_OnWmSize>
                       ; ... etc.
xxiWnd_OnWmPaint proc
  Ret
xxiWnd_OnWmPaint endp

xxiWnd_OnWmSize proc
  Ret
xxiWnd_OnWmSize endp

; ... more method bodies here...

There is an article on my site, but the site is down right now - something with the domain name... as soon as it will be up - 'www.codexxi.com'. The objects will be fast and small at the same time! This principle will be in the core of OOP code generator I am writing.


Дата: Авг 28, 2003 05:23:44

AsmGuru62
Sounds great! I'm looking forward for you completing such an interesting task.

That OOP you mentioned...
Well, actually it's not mine... you know. I've been using it for a while (some complex projects in asm) and it's not buggy. At least it worked fine for me.


Дата: Сен 3, 2003 17:54:08

КТО ПОДСКАЖЕТ!!!!!! А как на Nasm реализовать КЛАСС???


Дата: Сен 4, 2003 14:32:21 · Поправил: teleport


А как на Nasm реализовать КЛАСС


Не знаю, как там NASM (не пробовал), но много думал на эту тему. И, кажется, не все так сложно, как может показаться. Для того, чтобы организвать ООП на асме, нужно просто создать структуру с приватными данными класса и ряд процедур обработки (методы). Что-то в таком духе:

MY_CLASS STRUCT
ObjectWidth dd ?
ObjectHeight dd ?
.................
MY_CLASS ENDS

MyClassCreate PROC
отхватываем память любым способом в количестве SIZEOF MY_CLASS и возвращаем в EAX указатель на полученный блок памяти (этот указатель и есть в дальнейшем "объект")
ret
MyClassCreate ENDP

MyClassDestroy PROC, Object:DWORD
освобождаем память (указатель - в Object)
ret
MyClassDestroy ENDP

MyClassGetWidth PROC, Object:DWORD
mov edx,Object
assume edx:PTR MY_CLASS
mov eax,[edx].ObjectWidth
ret
MyClassGetWidth ENDP

MyClassSetWidth PROC, Object:DWORD, NewWidth:DWORD
mov edx,Object
assume edx:PTR MY_CLASS
mov eax,NewWidth
mov [edx].ObjectWidth,eax
ret
MyClassSetWidth ENDP

и т.д. и т.п.


Дата: Сен 15, 2003 13:57:23

так а как реализуются ключевые слова
PUBLIC
PRIVATE
PROTECTED


Дата: Сен 15, 2003 16:31:04

emergenter
Собственно похоже.. Кроме PROTECTED

PUBLIC/EXTERNAL


Дата: Сен 15, 2003 17:39:31

Эти ключевые слова служат для ограничения доступа к объекту. Я не думаю, что это может быть вообще реализовано. Ассемблер, как язык, не ограничивает доступа к своим элементам. Может кто-то имеет идеи на эту тему?..


Дата: Сен 15, 2003 17:45:27

AsmGuru62
Макро могут всё :)


Дата: Сен 15, 2003 19:27:26

Наиболее радикальный способ написать собственный препроцессор


Дата: Сен 15, 2003 19:33:21

Fixer
А потом компилятор :)
Ну ничего подождите месяц другой я расскажу о Серверной модели.
Думаю, это понравится больше, чем ООП


Дата: Сен 15, 2003 19:37:01

А зачем private, protected и т.д. на асме? Типа никому нельзя доверять, даже себе?


Дата: Сен 15, 2003 19:40:00

Хорошо подмечено, кстати...
Зачем подражать ЯВУ?


Дата: Сен 15, 2003 22:10:12

Quantum

А зачем private, protected и т.д. на асме? Типа никому нельзя доверять, даже себе?

В этом и заключается разница между объектно-ориентированным и процедурным мышлением :). А всерьез три кита ООП: инкапсуляция, полиморфизм и наследование. Все остальное декорация.

P.S. Кстати первые C++ компиляторы как раз и представляли собой препроцессоры (наборы макросов) над C компиляторами.

P.S.S Насчет написания собственного компилятора генерирующего код, это нетривиальная проблема. Гораздо проще написать собственный препроцессор и использовать готовый компилятор.

. 1 . 2 . 3 . 4 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.046