объектное или только процедурное?

Предыдущая тема Следующая тема Перейти вниз

объектное или только процедурное?

Сообщение  Eric-S в Чт Авг 07, 2008 4:28 am

Я очень долго привыкал к идеи ооп, но когда принял, мне стало без неё трудно жить.

Только вот так и не понял, freebasic это чисто процедурный язык или он поддерживает класы?

Вот что в официальной документации
http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgClass

Неправдали скудно?

Ладно, идём дальше:
http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgType
Старый type, но сколько же в нём наворотов!

Есть даже конструкторы и деструкторы, прямо как у объектов.
Получаеться, что переменные стали объектами.

Есть даже пространство имён
http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgNamespace
Это немного напоминает классы. Тем более для обращения к пространству имён используеться знак ".".


Есть даже разграничения области видимости public protected private.



При работе со сторонними библиотеками мне попадался символ "->", знакомые с php смогут отметить, что и в freebasic он используеться в анологичном контексте, т.е. при обращении к свойствам и методам класса.



Представляете себе, есть даже оператор new
http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgOpNew


Но вот классов, как таковых и соответственно объектов я не обнаружил!


Возможноли создать класс и если да, то как это сделать?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

OOP

Сообщение  ShenZN в Чт Авг 07, 2008 10:58 am

Да, FreeBasic имеет поддержку oop. В этом направлении FB начал развиваться с 0.17 версии. Но пока полной поддержки класов нет и в этой роли пока выступает Type.

ShenZN

Сообщения : 155
Дата регистрации : 2008-02-18
Откуда : Ukraine

Посмотреть профиль http://lodestar-game.narod.ru

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  Eric-S в Вс Авг 10, 2008 8:55 am

Ух. Я сегодня засел за изучение данного вопроса. И теперь могу сказать, что классы есть!
Только выглядит это очень непривычно. Покрайней мере для меня.

Расскажу на будущее, для тех кому тоже будет интересно. об обектноориентированном программировании написано много и я повторяться уже небуду. Ниже имено о freebasic'e.

В принципе, как я уже это отмечал раньше, бэйсиковские типы данных, очень похожи на объекты.
Ну вот от сюда и плясали.


Класс объявляет конструкция type

type class_name
end type

А внутри неё можно делать свойства. Это как по старому.

type mArray
dim key as string
dim value as string
end type

Но можно декларировать и методы, в качестве которых используются процедуры (sub) и функции (function). А вот здесь и начинаются необычности.


методы

Сама функция или процедура может находиться где угодно, но её имя должно начинаться с имени класса и точки.

type mArray
declare function myfunc() as long
end type

function mArray.myfunc() as long
return 0
end function

Да, это весьма непривычно.
В c++ кажеться что-то похожее, но там всё берётся в блок с ключевым словом class, а здесь такого нет.

Похожую роль берёт на себя пространство имён (namespace), но об этом не сейчас.



активные свойства

Теперь о свойствах. Это вообще уникальное явление, которого я кроме бэйсика негде не встречал. Под свойствами я имею ввиду конструкцию property.
Это даже больше соответствует концепции ооп, чем в других языках. Там программисты использовали методы get и set.

Те кто знаком с visual basic знают property. Только они потеряли ключевые слова get и let. Это логично, поскольку по аргументам и так понятно, что к чему.

Тем, кто не знает, рассказываю подробнее.

Конструкция property (свойство), это функции которые принимают и возвращают свойства класса. Их должно быть две (обязательно иначе мой fb ругался). Причём с одинаковыми именами.

type mArray
declare property value() as string
declare property value( byVal nevVal as string)
end type

property mArray.value() as string
' это возвращатель, работает как функция
return "значение свойства"
end property

property mArray.value( byVal nevVal as string)
' это получатель, работает, как процедура
end property



Объекты.

Объект это переменная, которая содержит экземпляр класса. Только вот при объявлении ключевое слово new куда-то потерялось.

dim a_object as mArray

Вот и всё. У нас уже есть объект a_object.
Ну а дальше поступаем с ним как хотим.


А, да, внутри класса, переодически приходится обращаться к текущему экземпляру. Ключевое слово this нужно писать вместо имени класса.


конструкторы и деструкторы

Тоже есть! Помню, долго я искал их в vb6, запрятаны они были в странные слова, кои повторять нехочеться. А тут всё просто
constructor и destructor. Использовать нужно вместо sub.

type mArray
declare constructor constructor1()
declare destructor destructor1()
end type

constructor mArray.constructor1()
print "объект инициирован"
end constructor

destructor mArray.destructor1()
print "объект завершен"
end destructor

Здорово? Вот бы везде так чётко.
Кажеться конструкторов и деструкторов может быть несколько, но я ещё не проверял.




итог

freebasic поддерживает классы.
А вот объекты...
Ещё не знаю.

Пойду, дальше ковырять, может и с вами поделюсь.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  Eric-S в Вт Авг 19, 2008 8:19 am

И вот ещё вопрос.
Я ведь чётко с объектами так и не разобрался, хотя и пишу.

Как я понимаю есть несколько способов создать объект?

Первый, прямой.
Код:

dim myobj as myclass
И поехали. Свойства и методы получаем, пользуя знак ".".
Не знаю, чем-то меня данный способ смутил (забыл уже блин!).
Просто с некоторого времени, я стал пользоватся другим.

Код:

dim myobj as myclass pointer
myobj = new myclass


И теперь к свойствам и методам, я уже обращаюсь через знак "->".

Такойй способ хоть и выглядит более громоздким, но у меня работает чётко.
Да и выглядит немного привычнее.

Только меня смущает, "pointer". Откуда он всплыл? Наверное нужно объект как-то по другому объявлять?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Объекты

Сообщение  ShenZN в Вт Авг 19, 2008 6:18 pm

Eric-S, во втором варианте обьект объявляется в динамической памяти, поэтому объявление переменной myobj как указатель обязательно, так как он будет хранить начальный адрес твоего объекта в динамической памяти. А первый вариант аналогичен объявлению какой либо переменной.

ShenZN

Сообщения : 155
Дата регистрации : 2008-02-18
Откуда : Ukraine

Посмотреть профиль http://lodestar-game.narod.ru

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  Eric-S в Ср Авг 20, 2008 5:59 am

Значит оба варианта верны?
Или какой-то предпочтительнее?

Мы с Tux'ом уже выясняли на счёт разници ptr и pointer.
Так, что про указатели более менее понятно.

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

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  tux в Ср Авг 20, 2008 7:55 am

Ну наскока я понимаю, то при создании "класса" как переменной, его нельзя явно удалить, тока автоматически компилятором при выходе из процедуры где он используется, а с использованием указателя, ето сделать можно в любой момент, но при етом вся ответственность за удаление объекта из памяти лежит на плечах программиста. Какой вариант использовать, думаю зависит от решаемой задачи
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  Eric-S в Ср Авг 20, 2008 8:27 am

А-а-а! Вот оно дело-то в чём!

Правда, тут есть прикол.

Я же тут как раз, с этими списками и деревьями заморачиваюсь. И без множества объектов просто не обойтись.

Прикол заключаеться в том, что когда я удаляю объект.

Код:

delete myopj

Запускаеться деструктор класса и отрабатывает. Но сам объект по сути не удаляеться. И дальше по программе, я могу его снова пользовать. Негативных последствий замечено небыло.

Надо будет ещё раз потестировать. Такое впечатление, что вся структура в памяти так и остаёться.

Кстати, не подскажите, как можно отслеживать состояние памяти. Сколько занято и сколько освобождено?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  tux в Ср Авг 20, 2008 8:32 am

Негативные последствия вылезли у мня (уже обсуждалось), а вот на счет слежения за памятью я во FB ничего подобного чета ненашел, но полюбому сама опреационка это должна отслеживать, следовательно должна быть какаято сторонняя утилитка, которая может показывать занятую прогой память
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  tux в Ср Авг 20, 2008 8:34 am

но я чета ниче нормального ненагуглил((
хотя в ХР даже в диспетчере задач показывает скока памяти хавается, только то ли ето, хз
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  Eric-S в Ср Авг 20, 2008 5:08 pm

Странно. Вроде бы с памятью должно быть!

Даже вон php и то можно выводить сколько занято.


А у меня ещё вопрос про классы.

Наследование есть?
Не могу найти, как наследовать класс.
Хотя есть public, protected и private.
Ведь protected должен быть только для классов наследников?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  tux в Ср Авг 20, 2008 5:53 pm

Я вообе с классами мало имел дело, так что тут врятли чем подскажу
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  Eric-S в Пн Авг 25, 2008 9:35 pm

Создал dll'ку с классом, но в программе она подключаеться как непонятно что.


Например конструктор не хочет выполняться, пока его не экспортируешь и не объявишь в программе.

Подскажите, как правильно работать с объектными динамическими библиотеками.

Я когда-то читал, про то, что они бывают нескольких видов.
Стандартные они не поддерживают классов.
А есть с поддержкой.
Причём я помню, что для таких библиотек не нужно декларировать методов.

Речь правда шла о msvc, но может быть и fb умеет?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  tux в Вт Авг 26, 2008 5:48 am

Ну это ты наверн про ActiveX говориш. Про них и FB я ничего не слышал, наверн надо на оф форуме пошариться. Но наскока я знаю это чисто микрософтовая технология, и в других ОС подерживаться не будет
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: объектное или только процедурное?

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения