Придумай другой механизм, позволяющий легко оперировать разными уровнями абстракции в программном коде.
А то это похоже на "демократия — это плохо, потому что не совершенно".
Здравствуйте, Voblin, Вы писали:
V>Путь к ООП обязательно нужно пройти. Но нужно иметь в виду, что, в общем-то, оно имеет под собой довольно слабенькую философскую основу. И поэтому нужно быть готовым не только пройти путь к ООП, но и путь от ООП. Т.е. в какой-то момент понять, что это не серебряная пуля, отбросить шоры, и только тогда научиться применять ООП действительно грамотно — там и только там, где оно применимо.
V>И ещё. За очень редким исключением (gamedev, имитационное моделирование) программа не должна моделировать реальный мир. Но она должна уметь встраиваться в реальный мир. Есть куча программ, которые замечательно что-то там моделируют, но для которых в реальном мире места не нашлось.
Как раз в большинстве случаев программа если не моделирует, то отображает реальный мир. Вот я набираю текст: в голове моей фраза, я по буковкам переношу ее в программу и программа моделирует мой мозг. Частично, конечно, но больше мне и не надо.
Отображение фразы в программе — типичный объект, и философия его проста но никак не слаба: из реального мира поступают сообщения, по ним поддерживать актуальное состояние отображаемого объекта.
Здравствуйте, Voblin, Вы писали:
V>Менее радикальный — это "сходить налево" туда, где ООП вообще не применяется. Это не обязательно Нотепад. Это может быть что-то из ФП, это может быть SQL, это может быть VBA или 1С.
Не надо ля ля. В VBA ООП применяется и еще как, это вполне себе ООП язык . В 1С тоже можно некоторые практики из ООП перенести, хоть и сложнее это будет. SQL — сам язык конечно не ООП даже близко, но базу можно проектировать по ООП принципам. Плюс применять ООП (а также другие подходы) можно для генерации SQL запроса.
Здравствуйте, elmal, Вы писали:
E>Не надо ля ля. В VBA ООП применяется и еще как, это вполне себе ООП язык .
Оно там конечно применяется, но возможности конструирования объектов там нет, значит говорить об объектной декомпозиции не приходится.
E> SQL — сам язык конечно не ООП даже близко, но базу можно проектировать по ООП принципам.
Отличный способ прострелить себе ногу.
E> Плюс применять ООП (а также другие подходы) можно для генерации SQL запроса.
Я тебе больше скажу — в ООП стиле можно писать на голом С. Вот только объектно ориентированным С от этого не становится.
... << RSDN@Home 1.2.0 alpha 4 rev. 1260 on Windows 7 6.1.7600.0>>
Здравствуйте, VGn, Вы писали:
M>> Это как "пчёлы против мёда"? VGn>Придумай другой механизм, позволяющий легко оперировать разными уровнями абстракции в программном коде.
Теория множеств Цермело-Френкеля.
Теория типов Мартина-Лёфа.
VGn>А то это похоже на "демократия — это плохо, потому что не совершенно".
Демократия — ещё один способ манипулирования. Как и ООП.
Поэтому они оба плохи.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Здравствуйте, rfq, Вы писали:
rfq>Как раз в большинстве случаев программа если не моделирует, то отображает реальный мир. Вот я набираю текст: в голове моей фраза, я по буковкам переношу ее в программу и программа моделирует мой мозг. Частично, конечно, но больше мне и не надо. rfq>Отображение фразы в программе — типичный объект, и философия его проста но никак не слаба: из реального мира поступают сообщения, по ним поддерживать актуальное состояние отображаемого объекта.
Ага. Зеркало если не моделирует, то отражает мою морду лица.
Вот я варю борщ. В голове моей желание покушать. Я переношу в кастрюлю свеклу, картошку, морковку, и кастрюля моделирует мой желудок. Частично, конечно, но больше мне и не надо.
Варка борща в кастрюле — типичный объект, и философия его проста но никак не слаба: из реального мира поступают вода, мясо и овощи, по ним поддерживать актуальное состояние отображаемого объекта (желудка? надеюсь, что не содержимого прямой кишки...). Какая-то тень от листьев хрена необыкновенно хреномутного получается.
Здравствуйте, AndrewVK, Вы писали:
AVK>Оно там конечно применяется, но возможности конструирования объектов там нет, значит говорить об объектной декомпозиции не приходится.
Как это нет? Оператор new есть. Инкапсуляция есть в полном объеме, полиморфизм тоже достаточно неплох. С наследованием хуже дела обстоят, но без него вполне можно обойтись, а где надо — эмулировать.
E>> SQL — сам язык конечно не ООП даже близко, но базу можно проектировать по ООП принципам. AVK>Отличный способ прострелить себе ногу.
Во всех крупных проектах, где я учавствовал и учавствую, база и была спроектирована по ООП принципам. Нареканий никаких, одна выгода.
AVK>Я тебе больше скажу — в ООП стиле можно писать на голом С. Вот только объектно ориентированным С от этого не становится.
Ну это да. Я в свое время читал книгу — ООП на ассемблере, очень много интересного подчерпнул .
Здравствуйте, VGn, Вы писали:
M>> Это как "пчёлы против мёда"?
VGn>Придумай другой механизм, позволяющий легко оперировать разными уровнями абстракции в программном коде.
Я всю жизнь пользуюсь этими другими механизмами, коих очень, очень много. ООП — частный случай, пригодившийся только для задач агентного моделирования. Других применений ООП я не видел — для всех прочих задач эта модель неадекватна.
Здравствуйте, elmal, Вы писали:
AVK>>Оно там конечно применяется, но возможности конструирования объектов там нет, значит говорить об объектной декомпозиции не приходится. E>Как это нет? Оператор new есть.
Речь о конструировании типов. Если его нет (а его нет), то нет и ОО декомпозиции, а значит и говорить об ООП не приходится.
AVK>>Отличный способ прострелить себе ногу. E>Во всех крупных проектах, где я учавствовал и учавствую, база и была спроектирована по ООП принципам.
Угу, я знаю что 70% проектов неуспешны, а те что успешны на 2/3 хромают на обе ноги. Но миллионы леммингов не могут ошибаться.
... << RSDN@Home 1.2.0 alpha 4 rev. 1260 on Windows 7 6.1.7600.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Речь о конструировании типов. Если его нет (а его нет), то нет и ОО декомпозиции, а значит и говорить об ООП не приходится.
Немного не понял, а что ж тогда конструируется оператором new, как не экземпляр определенного типа (класса)? И что тогда описывает Class, как не тип? Если я разбиваю свою предметную область на типы (классы), в них инкапсулирую данные и операции над этими данными — почему это не ОО декомпозиция? То, что среда уродская, и достоточно большим числом классов неудобно оперировать — это мелочи, в конце концов можно на модули еще разбить.
Здравствуйте, elmal, Вы писали: E>Немного не понял, а что ж тогда конструируется оператором new, как не экземпляр определенного типа (класса)?
Андрей намекает, что есть существенная разница между конструированием типов и конструированием экземпляров.
E>И что тогда описывает Class, как не тип?
А что, в VBA уже можно описать свой Class?
E>Если я разбиваю свою предметную область на типы (классы), в них инкапсулирую данные и операции над этими данными — почему это не ОО декомпозиция? То, что среда уродская, и достоточно большим числом классов неудобно оперировать — это мелочи, в конце концов можно на модули еще разбить.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, jeeist, Вы писали:
J>Извиняюсь, опять не смог ничего найти, хотя наверно J>такая тема уже где-то была.
J>Заинтересовал вопрос: как лучше освоить ООП? J>Точнее — что следует освоить перед этим.
J>Почему-то мне кажется, что в реальной жизни J>все устроено "не по ООП", а объекты могут быть J>(или не быть) добавлены к этому.
J>И программист должен в первую очередь освоить J>основы и только потом, если хочет, может добавить ООП. J>А если начинать с ООП, ничего хорошего не получится.
Я прошёл путь от восхищения от ООП до его полного неприятия. Сей-час нахожусь по середине. ООП иногда предлагает красивые и понятные решения проблем дизайна программы. Я так и думаю что правда всегда где-то по середине. Ни одна пародигма только сама по себе не ведёт к успеху.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, elmal, Вы писали: E>>Немного не понял, а что ж тогда конструируется оператором new, как не экземпляр определенного типа (класса)? S>Андрей намекает, что есть существенная разница между конструированием типов и конструированием экземпляров.
под коструированием экземпляров понимается MyClass object = new MyClass? Такой синтаксис есть, и всегда был. Или проблема в том, что конструктор без параметров? Так делается это через фабричный метод, например так:
Public Static Function createInstance(param1 As Integer, param2 As Integer) As Class1
Class1 myclass = New Class1
...
createInstance = myclass
End Function
Синтаксис уже не очень хорошо помню, вроде как подобным образом было. Также не помню, можно ли запретить конструктор по умолчанию, возможно и нельзя, но это ничего не меняет.
E>>И что тогда описывает Class, как не тип? S>А что, в VBA уже можно описать свой Class?
Всегда было можно. Называется это правда Class Module, ключевого слова Class да, в VBA нет. Но по сути Class Module это и есть класс. Да, один Class Module на файл получается, очень неудобно. Но тоже самое, можно конструктор, деструктор задать, можно органичение видимости сделать, и можно new сделать.
Практически все то, что можно на VB6, можно и на VBA. Код в обе стороны переносится на ура.
Здравствуйте, elmal, Вы писали: E>под коструированием экземпляров понимается MyClass object = new MyClass? Такой синтаксис есть, и всегда был.
Да.
E>Всегда было можно. Называется это правда Class Module, ключевого слова Class да, в VBA нет. Но по сути Class Module это и есть класс. Да, один Class Module на файл получается, очень неудобно. Но тоже самое, можно конструктор, деструктор задать, можно органичение видимости сделать, и можно new сделать.
Хм. Что-то не получается у меня это сделать. Как создать экземпляр этого "Class Module"? Точнее, у меня это валится прямо на строчке c = New Class1.
E>Практически все то, что можно на VB6, можно и на VBA. Код в обе стороны переносится на ура.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Хм. Что-то не получается у меня это сделать. Как создать экземпляр этого "Class Module"? Точнее, у меня это валится прямо на строчке c = New Class1.
Так я ж написал — MyClass object = new MyClass. Конструктор только как public надо объявить
Здравствуйте, elmal, Вы писали:
E>Так я ж написал — MyClass object = new MyClass. Конструктор только как public надо объявить
Только что прогнал, у меня работало. По умолчанию да, валилось на этой строчке так как конструктор приватный генерился по умолчанию. Я аж удивился, думал что правдо нельзя стало, и я наврал
Здравствуйте, AndrewVK, Вы писали:
E>>Немного не понял, а что ж тогда конструируется оператором new, как не экземпляр определенного типа (класса)? AVK>Я жирным ключевое слово пометил.
Что-то я не понимаю. Объект всегда был экземпляром класса, нет?
Myclass instance1 = New Myclass
Myclass instance2 = New Myclass
Myclass в данном случае — мой сконструированный тип. instance1, instance2 — экземпляры моего собственного сконструированного типа.
Речь шла изначально про конструирование типов, якобы в VBA этого нет. А что тогда Class Module, как не собственный тип?