|
|
| Посл.отвђт | Сообщен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 Насчет написания собственного компилятора генерирующего код, это нетривиальная проблема. Гораздо проще написать собственный препроцессор и использовать готовый компилятор. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.046 |