Допустим нарисовал я кнопку. И еще, еще...
А как сделать эту обьектно-орентированность (блин, слово то какое) не пойму!
Может кто обьяснит?
Обьектно-орентированность, в GMODE |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
Обьектно-орентированность, в GMODE |
gMan |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Допустим нарисовал я кнопку. И еще, еще...
А как сделать эту обьектно-орентированность (блин, слово то какое) не пойму! Может кто обьяснит? -------------------- Стабильность - признак мастерства
|
BlackShadow |
Сообщение
#2
|
Гость |
Например создаёшь объект типа Type Но это глупо. Вот, если сделать какой-то базовый объект типа Type В которм ничего не рисуется, но все твои кнопки, едиты и т. д. и т. п. наследуются от него и перекрывают Paint, то это уже будет на что-то похоже. А кастовать примерно так: Var ... образно говоря. |
gMan |
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Хм... На паскале то понятно.
А с ассемблером как быть? -------------------- Стабильность - признак мастерства
|
BlackShadow |
Сообщение
#4
|
Гость |
Ну ты загнул. Было у меня дело - писал на асме с ООП, но по памяти не скажу. Посмотрю дома в поннедельник обязательно вышлю. У меня под IDEAL...
|
gMan |
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Отлично! жду!
Заранее спасибо. -------------------- Стабильность - признак мастерства
|
gMan |
Сообщение
#6
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Уже ведь вторник, а обещанного нет. :p2:
-------------------- Стабильность - признак мастерства
|
BlackShadow |
Сообщение
#7
|
Гость |
Я уже извинился в другом топике - запамятовал (выходные бурные были ) Узелок на ... завязал короче. Завтра притораню.
|
gMan |
Сообщение
#8
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Ждемс...
-------------------- Стабильность - признак мастерства
|
BlackShadow |
Сообщение
#9
|
Гость |
Ндя. Особо порадовать нечем. Оказывается поприбивал я всё, что делал под ООП, а книгу спихнул кому-то Зато выжил инклюдер и пару воспоминаний.
SEGMENT VMT_Seg PUBLIC Чего тут есть: 1). Описывается VMT_Seg. В этом сегменте и будут храниться все VMT. 2). Макрос LoadVMTSeg загружает в сегментный регистр адрес VMTSeg. 3). Тип MPTR описывает тип элементов VMT. Для маленьких моделей памяти можно заменить и на WORD, т. к. достаточно хранить лишь смещение метода. 4). Макрос MakeVMT является основным во всём этом бреде. Он и инициализирует таблицу VMT для объекта. Естественно должен вызываться в конструкторе. Теперь о воспоминаниях. Описывается класс как struc, но необычный. В нём может присутствовать такая вот форма:
Таким вот макаром объявляются методы. Ещё есть такой момент: конструктор лучше оформить как обычный метод, который вызывает MakeVMT, а затем уже какой-нибудь виртуальный метод инициализации. Вызывать методы лучше через CALL METHOD Obj.MyMethod. А вот тут точно не помню: это форма сама заносит this/self/me в ES:BX или это самому надо делать, чтобы VMT он нашёл... Ну, это можно и в дебугере уточнить. А вот как описывается наследование, вот этого я действительно не помню З. Ы. : забыл-то про самое главное. Виртуальные методы объявляются вроде так: VIRTUAL MyFun MPTR MyObj_MyFun Прикрепленные файлы OOP.Inc ( 262 байт ) Кол-во скачиваний: 2 |
gMan |
Сообщение
#10
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Спасибо, ты мне очень помог.
-------------------- Стабильность - признак мастерства
|
BlackShadow |
Сообщение
#11
|
Гость |
Не на чем. Если напишешь чего рабочего, выложи, PLZ, кусок кода, чтоб память освежить... А то неправильно как-то: писал, писал, а тут раз и всё забыл...
|
gMan |
Сообщение
#12
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Нет проблем, как напишу - так покажу
P.S. Если что нть сам вспомнишь выложи. Сообщение отредактировано: TheLizard - -------------------- Стабильность - признак мастерства
|
gMan |
Сообщение
#13
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
BlackShadow, что если я напишу модуль компонентов на пасе, смогу ли я использовать потом эти компоненты в своей ос на асме, в граф.режиме. Если да, то как вызывать процедуры из паскалевского модуля?
Сообщение отредактировано: TheLizard - -------------------- Стабильность - признак мастерства
|
BlackShadow |
Сообщение
#14
|
Гость |
Давай-ка лучше заново и по-подробнее. Я что-то не особо въехал. Ты спрашиваешь, как использовать процедуру написанную на ASM в паскале? {$L ...) и понеслось. Это ты должен знать. Если наоборот, то EXTERN ...:PROC и поехали.
А если тебе надо из ассемблерного кода поработать с паскалевскими объектами, то это уже другое дело. Рекомендую так: создаёшь класс TObject такого типа: Type После этого надо заюыть про то, что Dispose сожно вызывать и самому, а пользоваться только Free. А САМОЕ важное - ВСЕ классы должны наследоваться от такого вот TObject. Чего мы этим добились? Мы знаем где находится адрес VMT в объектах и можем их спокойно создавать, кастовать и убивать:). Чтобы создать объект: {Creating static object} Что примечательно, последний вариант сам вызовет new и т. д., а так же вернёт тебе поинтёр на инстанс. Чтобы вызвать какой-то динамический метод: MOV BX,[WORD PTR InstanceOfMyObject] {Get Offset Of VMT} Надо заметить, что Method #0 - Destructor. Чтобы кильнуть: PUSH SEG MyObj оно и память освободить и деструктор вызовет. Вот только я в душе не знаю во что превращаются имена статических методов объектов при компиляции, а так же имена конструкторов... |
gMan |
Сообщение
#15
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Спасибо, далее сам догоню
Уже что то назревает... Мне не даёт покоя вопрос:"Стоить ли вообще использовать Паскаль? Или все делать на чистом асме?" На паскале я бы написал ООП и на асме тоже. Но на пасе вроде удобней и наглядней, хотя ОСь написана на Асме. Как то сам не знаю, что хочу Допустим все компоненты бубут на асме, то как сделать так чтобы их могли использовать другие, но не видели исх.код (библеотека короче). На паскале с этим проблем нет. И стоит ли запихивать компоненты в библиотеку(не библиотека она вовсе, а просто файл с процедурами) API функций? И вообще на каком языке лучше писать ОС? Сообщение отредактировано: TheLizard - -------------------- Стабильность - признак мастерства
|
BlackShadow |
Сообщение
#16
|
Гость |
А зачем тебе понадобился паскаль? Лень графику делать?
|
gMan |
Сообщение
#17
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Нет просто удобнее работать
Так все таки лучше, вообше паскаль не трогать? P.S. Посмотри моё пред последнее сообщение, оно было отредактировано до того как я увидел твоё сообщение. -------------------- Стабильность - признак мастерства
|
BlackShadow |
Сообщение
#18
|
Гость |
Да хоть на басике пиши
Чем паскаль удобнее асма? Цитата Допустим все компоненты бубут на асме, то как сделать так чтобы их могли использовать другие, но не видели исх.код (библеотека короче). На паскале с этим проблем нет. И стоит ли запихивать компоненты в библиотеку(не библиотека она вовсе, а просто файл с процедурами) API функций? Вообще нифига не понял. |
gMan |
Сообщение
#19
|
Пионер Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: 1 |
Бррр...
Короче на чистом асме писать буду и точка Теперь все заново и попорядку: Как писать компоненты? Я имею ввиду, стоит ли делать каждый компонент отдельным файлом или все их запихать в один общий файл, а может вообще всё в библиотеку API функций. -------------------- Стабильность - признак мастерства
|
BlackShadow |
Сообщение
#20
|
Гость |
1). А что ты подразумеваешь под компонентом?
2). Как тее удобней. Мне бы было проще распихать их по файлам, а линковать вместе. 3). Ты сначала определись как ты свои API экспортировать будешь. |
Текстовая версия | 29.03.2024 21:06 |