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

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

<< . 1 . 2 . 3 . 4 . >>

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


Дата: Сен 18, 2003 23:05:34

AsmGuru62
То есть речь идёт о виртуальных функциях, как я понял.
Почти. Главный вопрос в OOP -- что делает алгоритм, а не как он это делает. Поэтому мы и страдаем абстракцией, инкапсуляцией и прочей заразой.

Только причём здесь private, public и protected?
Ну, так я об этом и спрашивал.


Дата: Сен 19, 2003 01:07:13

Quantum
причём здесь private, public и protected?

Конечно можно легко обойтись и без них. Но ведь с ними получается более стройный код, IMHO.

Если я не хочу чтоб класс-потомок обращался к какой-то функции, ставлю её в приват. И компилятор меня уведомит: "вы брат-де запретный плод хотите!" :) и так далее.


Дата: Сен 19, 2003 01:58:06


Если я не хочу чтоб класс-потомок обращался к какой-то функции, ставлю её в приват. И компилятор меня уведомит: "вы брат-де запретный плод хотите!" :) и так далее.


Что-то я не совсем понял, в чем проблема? Разве в асме кто-то уже отменил такую штуку как:

MyProc PROC PRIVATE,
Param1:DWORD,
Param2:DWORD


....
....
....

ret
MyProc ENDP


Такую процедуру можно вызывать в пределах данного асм-файла, но не из другого obj-модуля. Если же опустить слово PRIVATE, то оно будет PUBLIC, и его без проблем можно будет вызывать из других obj...


Дата: Сен 19, 2003 12:55:03

teleport
А для класса ты даже в этом файле её вызват ьне сможешь, вот :Р


Дата: Сен 19, 2003 14:04:55

Quantum
Ну, так я об этом и спрашивал.

Это вопрос не об ООП -- а об способах реализации технологий.
(Гм.. а такой книги даже нет!!! Обана :))) Только сейчас понял.)

ОК.

Давайте вернёмся к истокам :))

Итак, у нас есть задача.

Есть файловая система FAT (12 чтоли)

Мы свами должны придумать API для общения с файловой системой.

Я вот предлагаю такие:
open()
close()
write()
read()


Ну ясно, что мало.. Но нам хватит.

Теперь давайте подумаем как это должно работать?
Чтобы что-то делать с файлом, мы должны знать ГДЕ ОН НА ДИСКЕ
Для этого, нам нужден УКАЗАТЕЛЬ НА ПЕРВУЮ ЗАПИСЬ В FAT

Ага. А что нам ещё нужно?
2. Размер файла
3. Текущая позиция указателя для записи, чтения
4. Какие то флаги состояния....
5. Адрес буфера, куда этот файл считыватеся/читается

Ну для начала хватит.

--------------------------------------------
Ну вот господа програмеры/архитекторы, у нас есть только DOS и ASM как API строить будем?

Давайте идеи, только чтобы просто и без заумностей :)))
И вообще, если есть исходники DOS по этой части - можно в студию :)


Дата: Сен 19, 2003 21:32:42

А как такую задумку выполнить наиболее эффектно??
Есть класс (НУ К ПРИМЕРУ!!)
class My_CLASS{
public:
void my_function(int param1, int param2);

private:
int i;
int j;
};
void My_CLASS::my_function(int param1, int param2)
{
i=param1+param2;
};

ТАК ВОТ МОЖНО ЛИ КАК ТО?? сделать на ассемблере такую функцию-ЧЛЕН!!!!??
Сдесь изюминка не сама функция а передача параметров!! Если кто делал уже такое или задумки есть... БУДЕТ ОЧЕНЬ ИНТЕРЕСНО!!! ХЕЛП!!!


Дата: Сен 19, 2003 22:04:48

Это вопрос не об ООП -- а об способах реализации технологий. (Гм.. а такой книги даже нет!!! Обана :))) Только сейчас понял.)


Пратт Т. Языки программирования: Разработка и реализация.


Дата: Сен 19, 2003 22:08:42

Fixer
Неужели так сложно?


Дата: Сен 19, 2003 22:14:45

emergenter
А в чём сложность имплементации такого класса и такой функции?
Это даже не виртуальная, а обычная функция.


Дата: Сен 19, 2003 22:21:28

AsmGuru62
ТАк в том то и дело КАК ТЕХНИЧЕСКИ РЕАЛИЗОВАТЬ???


Дата: Сен 20, 2003 11:25:27

Fixer
Пратт Т. Языки программирования: Разработка и реализация.

ЭЭЭ неее.
Я про несколько другое говорю. :))
Это намного выше уровня ЯВУ.
ЯВУ -- это конкретика. А вот общей теории я не видел. И зря.


Дата: Сен 20, 2003 11:32:56

ОК, я продолжу..
(Пусть это будет Бета релиз статьи :))))

Итак, есть у нас open и так далее.
Первое что приходит на ум. Это сделать структуру my_file, в которой хоранить необходимые данные.
Давайте её сделаем
my_file struct

flags  db ? ;; Флажки состояния
status db ? ;; статус
res    dw 0 ;; --

name   dd ? ;; Указатель на строку с именем файла
ppath  dd ? ;; Указатель на строку с путём к файлу

fpointer dd ? ;; Указатель чтения / записи
pbuff    dd ? ;; Указатель на буфер
pbuffs   dd ? ;; Размер буфера

fsize    dd ? ;; Размер файла

my_file ends


Дата: Сен 20, 2003 11:40:34

Теперь дальше получается
Пусть функция open открывает файл..
Что это значит
push offset szFileName
call open


Я передаю указатель на строку с именем файла, open что там ищет в FAT, потом создаёт структуру my_file,
и возвращает указатель на эту структуру.

А что?
В структуре хранятся все данные для работы с файлом..
Иначе как DOS будет знать, над каким фалом вы работаете?

Это значит, что все остальным функциям, обязательно нужен ИДЕНТИФИКАТОР ФАЙЛА, который в нашем случае -- просто указатель на my_file.

Теперь давайте посмотрим, как организованы все остальные функции
write(
  file, // Указатель на my_file
  buff, // Указатель на buff
  size // размер
)

read(
  file, // Указатель на my_file
  buff, // Указатель на buff
  size // размер
)


Все остальные функции ОБЯЗАТЕЛЬНО СОЖЕРЖАТ указатель на структуру my_file


Дата: Сен 20, 2003 11:42:19

Это есть ИДЕЯ ООП в КОДЕ.

Первая ИДЕЯ ООП -- СВЯЗАТЬ ДАННЫЕ И КОД, который работает с ЭТИМИ данными.


Дата: Сен 20, 2003 11:46:24

Теперь вы можете выбросить 30% книг с вашего шкафа по этой теме. :)))

Далее.

Дядя X придумал NTFS.. теперь я долже учитывать права доступа к файлу. но код open/close/ мне меня не хочется..
Как мне поступить, чтобы добавить функциональность и с МИНИМАЛЬНЫМИ изменениями воплотить их в коде.

В этот раз идея ВКЛЮЧИТЬ СИСТЕМУ КОНТРОЛЯ ПРАВ ДОСТУПА.

Система контроля прав у нас бцудет простая
8 Битовое поле как в UNIX
Каждый файл его будет иметь..

Теперь как же это сделать?

<< . 1 . 2 . 3 . 4 . >>


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