Сообщество программистов Autodesk в СНГ

ADN Club => VBA => Тема начата: R.I.Chernov от 03-02-2015, 22:16:09

Название: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 03-02-2015, 22:16:09
Доброго времени суток, уважаемые форумчане! Я новичок в программировании, пытаюсь восполнить нехватку знаний. Не могли бы вы мне порекомендовать какую-нибудь статью, книгу или может быть пример на форуме, которые помогли бы мне разобраться с тем, что такое Class Module в VBA, и как с ним работать?
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Алексей Кулик от 04-02-2015, 00:46:13
Ээээ....
http://yandex.ru/yandsearch?lr=2&oprnd=7090097793&text=vba+class+module&csg=1708%2C2560%2C8%2C23%2C1%2C0%2C0&suggest_reqid=7294531141452486398645661655808
http://www.excelworld.ru/publ/vba/class_module/class_module/42-1-0-110
http://www.excel-vba.ru/chto-umeet-excel/rabota-s-modulyami-klassov/
Ну и тому подобное - не то?
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 04-02-2015, 10:47:59
не то?

Конечно то, спасибо!
Возьмите на вооружение ссылочку: http://kak-iskat.ru/
Ваш сарказм на данную тему будет выглядеть эффектнее, например : http://kak-iskat.ru/?q=Class+module+usage
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Алексей Кулик от 04-02-2015, 10:58:51
Мне проще готовый запрос опубликовать :) Но за ссылку спасибо ;)
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: trir от 04-02-2015, 23:02:19
Лично у меня такое отношение к Class Module - если нужны классы, значит dotNET
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 05-02-2015, 10:25:05
Лично у меня такое отношение к Class Module - если нужны классы, значит dotNET

Я инженер, а не программист. Понадобился VBA - изучаю. Нужны ли мне модули классов? Да бог их знает! :) Просто не люблю, когда что-то непонятно! Да и проще решать задачи, когда понимаешь, какими именно вещами ты можешь оперировать. Так что вопрос остается неизменным: "Где толково написано (таки для чайников), что такое класс-модули в VBA, и с чем их едят?!" ;)
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Алексей Кулик от 05-02-2015, 10:34:55
Вживую я бы попробовал объяснить, но тут на смех подымут с моими "объяснялками" ;) И будут правы.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 05-02-2015, 11:01:24
Вживую я бы попробовал объяснить, но тут на смех подымут с моими "объяснялками" ;) И будут правы.

)))) Да я понимаю, что это примитивное понятие. Я поэтому прошу не объяснить, а книгу толковую посоветовать, или статью :)
Просто в глазах "мамонта-программиста"  оно кажется не таким уж простым :) А перерыскать весь интернет пока не найдешь что-то толковое - сомнительная трата времени. Там может быть и норм написано во многих местах, но только если ты обладаешь начальными знаниями в этой области, например образованием :)
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Алексей Кулик от 05-02-2015, 11:35:49
Мне для понимания сути классов очень помог Шилдт С++, третье издание. Но оно уже не продается :(

Ай, и бог с ним, со смехом! Что, в первый раз, что ли? :)
Допустим, у нас есть "класс" - деревья. У всех деревьев есть общие признаки: ствол, к примеру. Листья, опять же; плоды у них там всякие. Это получается класс со своими свойствами. Деревья бывают садовыми (яблоня, вишня, груша...) - это уже класс-наследник. Как бы свойства родителя есть, но есть и свои, только им присущие (к примеру, плоды идут в пищу). Берем яблони - это еще один наследник со своим собственным свойством - типом плодов (яблоки). Берем сорт яблони - это еще один наследник.
Т.е. схема наследования получается примерно такая:
Дерево - Садовое - Яблоня - Сорт

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

Грубо - примерно так, наверно.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 05-02-2015, 13:40:42
Спасибо! Моя очередь вызывать смех, надеюсь не сморожу сильную глупость :)

В общем на текущий момент мое понимание всего такое: классы и объекты - основа объектно ориентированного программирования. Ваш пример - абстрактно показывает принцип наследования классов. Т.е. передачи части свойств и методов с попутным добавлением новых..
Каждый класс имеет свойства, методы и функции, ну также можно добавить события: типо у котенка 4 лапы и он черного цвета - это свойства, а то что его можно заставить есть или  бегать за  шариком - это мытоды, когда он нагадил на ковер - событие, потому как заставить его это делать вроде как нельзя! :)
Класс модули нужны, чтобы создавать новый вид классов, описывать их свойства и методы. И в VBA вроде как, в отличие от других языков, нельзя описать несколько классов в одном класс модуле?
Подскажите пожалуйста, сколько раз и где я ошибся в своем монологе? ;)
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Александр Ривилис от 05-02-2015, 13:47:28
Каждый класс имеет свойства, методы и функции, ну также можно добавить события
В терминах класса обычно "метод" и "функция" - это одно и тоже. Обычно в объектно-ориентированном программировании используется термин "метод".
У классов еще бывают конструкторы и деструкторы - особенные методы, которые вызываются автоматически при создании/удалении экземпляров классов.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Алексей Кулик от 05-02-2015, 13:50:04
Это уже глубины ООП :) Я перед собой ставил задачу показать наследование классов ;)
О, кстати, если я правильно понимаю, то в моем варианте все классы (кроме последнего) являются абстрактными - т.е. для них создать объект такого класса нельзя. А последний - является защищенным (sealed), создать его потомка невозможно.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Алексей Кулик от 05-02-2015, 13:53:03
Класс модули нужны, чтобы создавать новый вид классов, описывать их свойства и методы. И в VBA вроде как, в отличие от других языков, нельзя описать несколько классов в одном класс модуле?
Подскажите пожалуйста, сколько раз и где я ошибся в своем монологе? ;)
Я далеко не уверен в правильности сказанного, но у меня такое подозрение: именно в VBA один модуль класса есть один класс. Причем никаких абстрактных или защищенных классов сделать уже нельзя. Как реализовывается наследование - непонятно. В C# такого нет: внутри одного модуля можно прописать сколько угодно классов.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 05-02-2015, 17:30:55
именно в VBA один модуль класса есть один класс
Ну я это и имел ввиду, тока кривым языком :) В статье которую я читал было написано, мол в VBA в класс модуле нельзя создать несколько классов, поэтому название класса совпадает с названием модуля, что и означает по сути что "один модуль класса есть один класс".
Спасибо!
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 05-02-2015, 17:36:31
Это уже глубины ООП :) Я перед собой ставил задачу показать наследование классов ;)
О, кстати, если я правильно понимаю, то в моем варианте все классы (кроме последнего) являются абстрактными - т.е. для них создать объект такого класса нельзя. А последний - является защищенным (sealed), создать его потомка невозможно.
Хм... Спасибо! :) ... к сожалению, тут мои знания начинают страдать... Это я про абстрактные классы рассуждаю... Первый раз слышу :(
Подскажите пожалуйста, кто в Inventor API разбирается, класс ComponentOccurrences это какраз вышеупомянутый абстрактный?
И был бы признателен за пример защищенного класса в рамках Inventor'а.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 05-02-2015, 17:50:40
Каждый класс имеет свойства, методы и функции, ну также можно добавить события
В терминах класса обычно "метод" и "функция" - это одно и тоже. Обычно в объектно-ориентированном программировании используется термин "метод".
У классов еще бывают конструкторы и деструкторы - особенные методы, которые вызываются автоматически при создании/удалении экземпляров классов.

Спасибо! Что "метод" и "функция" - схожие термины, я вроде как понимал, потому и написал их через "и" :)  Но то что это абсолютно одно и тоже?! Залез в браузер, читаю : "Function Add(FullDocumentName As String, Position As Matrix) As ComponentOccurrence" но если нажать F1 "ComponentOccurrences.Add Method" :) Тут становится ясно кто программист, а кто нет :)

Если разговор зашел о тонкостях терминов, не могли бы вы провести вводный ликбез на тему: "Разница между процедурами и функциями". Как мне сказал один знакомый, мол это почти одно и тоже...но меня смущает это почти :) я без функций пока справляюсь, но может быть зря?
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Алексей Кулик от 05-02-2015, 17:58:14
Процедуры введены были в VB и продолжили свое существование вплоть до VB6 (а в VBA есть до сих пор). Разница между ними (насколько мне не изменяет склероз) в том, что функция обязательно возвращает какое-то значение, а вот процедура - нет. По крайней мере так в VBA для MS Office, ACAD.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 05-02-2015, 18:29:54
Процедуры введены были в VB и продолжили свое существование вплоть до VB6 (а в VBA есть до сих пор). Разница между ними (насколько мне не изменяет склероз) в том, что функция обязательно возвращает какое-то значение, а вот процедура - нет. По крайней мере так в VBA для MS Office, ACAD.
Спасибо. Я не раз натыкался в примерах, что процедура обращается к функции, та возвращает необходимое значение, и процедура продолжается дальше. Но сакральный смысл такой структуры действий я пока не познал :) Ну ниче, лиха беда начало!
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Александр Ривилис от 05-02-2015, 18:32:15
Подскажите пожалуйста, кто в Inventor API разбирается, класс ComponentOccurrences это какраз вышеупомянутый абстрактный?
В VBA (насколько я помню) не может быть абстрактных классов. Они есть в C#/VB.NET (про VB.NET я не уверен).
Защищенный класс - это тот, от которого запрещено дальнейшее наследование.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 05-02-2015, 18:39:52
Подскажите пожалуйста, кто в Inventor API разбирается, класс ComponentOccurrences это какраз вышеупомянутый абстрактный?
В VBA (насколько я помню) не может быть абстрактных классов. Они есть в C#/VB.NET (про VB.NET я не уверен).
Защищенный класс - это тот, от которого запрещено дальнейшее наследование.

:( Я запутался... :) Просто в моем понимании ComponentOccurrences как раз подходит под описанное Алексеем  понятие абстрактного класса, ну мол нельзя создать объект данного класса?  Как и в принципе все классы, которые в объектной модели Inventor'a именуются "Collection Objects".

П.С. Спасибо за ваш ответ.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Алексей Кулик от 05-02-2015, 21:22:42
Collection = коллекция. Набор объектов одного класса. В коллекцию можно добавить новый уникальный объект, можно удалить.
Если аналогия с яблонями все еще "катит", то яблоневая роща - это коллекция. В нее можно добавить (посадить) новую яблоню (новый уникальный объект); можно срубить ее (удалить объект), можно их посчитать, собрать яблоки и выполнить еще до дури всяких действий.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 06-02-2015, 10:07:49
Спасибо, Алексей.
П.С. Я наверно пока не буду тему закрывать, мы тут обсудили много полезного, но что можно считать ответом на начальный вопрос я пока не знаю. :)
Поищу еще какую-нибудь хорошою статью про класс модули, коли найду закину сюда. Или может быть кто-нибудь еще напишет.
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: Алексей Романов от 07-02-2015, 12:01:20
но что можно считать ответом на начальный вопрос я пока не знаю.
Пару слов скажу про некоторое отличие VBA АИ от остальных (Акад, ексель и т.п.). В Акаде в одном классе (допустим AcadDocument) реализованы методы, свойства и события. В АИ события из класса Document вынесены в класс DocumentEvents (так для всех объектов), который можно использовать только в модуле класса. Реально я использую модули классов для отслеживания событий в АИ, клавы или мыши. Для создания объектов я использую VB.NET...
На форуме cad.ru я приводил примеры создания классов на VBA для отслеживания событий, поищи там...
Название: Re: Помогите пожалуйста разобратся с понятием Class Module
Отправлено: R.I.Chernov от 07-02-2015, 16:59:02
Спасибо! Обязательно поищу.