Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структурированный мануал про ООП, в виде мануала, Нужен ли? 
:(
    Опции темы
 
Нужен ли мануал по теме ООП ?
Да [ 46 ]  [88.46%]
Нет [ 6 ]  [11.54%]
Всего проголосовавших: 52
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
EvilsInterrupt
Дата 7.8.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 3
Всего: 9



Создал Аналогичную тему, чтобы узнать мнение противников: почему же они ненавидят ООП? ))
PM MAIL WWW ICQ Jabber   Вверх
former
Дата 7.8.2007, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Цитата(EvilsInterrupt @  7.8.2007,  09:35 Найти цитируемый пост)
former, Читал Гради Буча? Я да. Это на мой взгляд самая лучшая книга про ООП! Но не смотря на то что автор действительно старался прояснить понимаются только концеции. Я же хочу совместно с теми кто согласится мне помогать написать руководство о том, как применять эти дела на практике. Почитайте еще раз мой первый пост!


EvilsInterrupt, согласен одна из лучших книг. Слушай, а может провести опрос в разделе "Для новичков" и узнать, какие разделы им даются тяжело и что остаётся непонятным?



Цитата(Bose @  7.8.2007,  12:58 Найти цитируемый пост)
EvilsInterrupt, а я думаю так: 
Если ты считаешь, что сможешь написать такую статью и хочешь её написать - то пиши и никого не спрашивай. А желающие покритиковать всегда найдутся. Как и желающие похвалить. Психология, блин =)


Bose, Я не сколько не пытался критиковать предложение EvilsInterrupt-а. Проголосовал за. Согласись, что прежде чем усовершенствовать что-то или делать более доступным, то необходимо провести оценку созданного и выявить слабые места.

Вот вам пример. Многие в университетах на технических специальностях изучают теорию автоматического управления(ТАУ или ТАР). На протяжении нескольких десятков лет по этой дисциплине издают литературу. Как только не пытаются донести авторы до своих читателей основы. И постепенно это начинает переростать в извращённую форму. А бестселлером по-прежнему остаётся Бесекерский (60-е года прошлого века).

Отправная точка - сам ученик. Повторюсь ещё раз, надо у них и спросить, что им не понятно. Тут не психология, а педагогика.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Bose
Дата 7.8.2007, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(former @  7.8.2007,  15:43 Найти цитируемый пост)
Согласись, что прежде чем усовершенствовать что-то или делать более доступным, то необходимо провести оценку созданного и выявить слабые места.

Не соглашусь. Я не могу согласится с тем, что это обязательное условие. Если бы ты, former, писал такую статью, то ты бы наверняка именно так и сделал. Но предъявлять такие же требования к другим желающим что-то написать - по-моему уже крайность. 

Сколько хороших идей появлялось на форуме, и сколько из них угасали даже не дойдя до стадии реализации. Зато с каким воодушевлением все давали советы на тему того как это надо делать.  smile 

Цитата(former @  7.8.2007,  15:43 Найти цитируемый пост)
 Повторюсь ещё раз, надо у них и спросить, что им не понятно. Тут не психология, а педагогика.

А педагогику - давайте оставим педагогам. К слову, я в жизни видел всего несколько действительно талантливых педагогов.


Цитата(EvilsInterrupt @  7.8.2007,  13:18 Найти цитируемый пост)
Создал Аналогичную тему, чтобы узнать мнение противников: почему же они ненавидят ООП?

Мне кажется, что многие новички просто не понимают зачем им учить теорию ООП, если для того чтобы "сделать программу" в Дельфи достаточно набросать компонентов на форму и установить нужные свойства. smile 
PM MAIL WWW Skype   Вверх
former
Дата 7.8.2007, 17:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Цитата(Bose @  7.8.2007,  16:32 Найти цитируемый пост)
Не соглашусь. Я не могу согласится с тем, что это обязательное условие. Если бы ты, former, писал такую статью, то ты бы наверняка именно так и сделал. Но предъявлять такие же требования к другим желающим что-то написать - по-моему уже крайность.  smile 


Bose, это не я предъявляю требования. Это классический подход. А по-поводу моих статей, то у меня их больше 100 в отечественных и иностранных изданиях и на очереди книга, хоть и не посвященных программированию. Так что опыту хватает.

Цитата(Bose @  7.8.2007,  16:32 Найти цитируемый пост)
Сколько хороших идей появлялось на форуме, и сколько из них угасали даже не дойдя до стадии реализации. Зато с каким воодушевлением все давали советы на тему того как это надо делать.  smile 


Это значит только одно, что люди не умеют отстаивать свои идеи и легко ведутся на чужую критику.

Цитата(Bose @  7.8.2007,  16:32 Найти цитируемый пост)
А педагогику - давайте оставим педагогам. К слову, я в жизни видел всего несколько действительно талантливых педагогов.


Цитата(Bose @  7.8.2007,  12:58 Найти цитируемый пост)
Как и желающие похвалить. Психология, блин =)


Видеть талантливых педагогов одно, а учиться у них - другое А психологию - психологам. smile 

И последнее. 

Bose, на протяжении всего обсуждении ты постоянно пытаешься подловить меня на критике и предъявлении требований. Выставляешь меня противником подготовки этого материала. Это ведь не так. Я с самого начала поддержал и поддерживаю желание 
EvilsInterrupt-а. Так что давай прекратим эту перепалку.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Bose
Дата 7.8.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51




Цитата(former @  7.8.2007,  17:45 Найти цитируемый пост)
Bose, это не я предъявляю требования. Это классический подход. А по-поводу моих статей, то у меня их больше 100 в отечественных и иностранных изданиях и на очереди книга, хоть и не посвященных программированию. Так что опыту хватает.

Не согласен, с тем что "классический подход" обязателен. Всё-таки это "мануал по ООП", а не научная публикация. Потому и спорю. Я считаю что каждый имеет право писать так как ему нравится. И каждый кто может помочь сделать написанное лучше имеет право это сделать. 


Впрочем, по-моему мы углубились в оффтоп  smile 

Цитата(former @  7.8.2007,  17:45 Найти цитируемый пост)
Bose, на протяжении всего обсуждении ты постоянно пытаешься подловить меня на критике и предъявлении требований. Выставляешь меня противником подготовки этого материала.

Да, так и было. Мне так показалось

Цитата(former @  7.8.2007,  17:45 Найти цитируемый пост)
Я с самого начала поддержал и поддерживаю желание EvilsInterrupt-а. Так что давай прекратим эту перепалку.

С удовольствием. 
PM MAIL WWW Skype   Вверх
EvilsInterrupt
Дата 7.8.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 3
Всего: 9



В общем, мне нужно от тех кто, кому то хоть раз помог ООП, описание того чем помог.
В таком виде:

0. Пояснение существовшей ситуации
1. К каким пришли выводам и почему
2. Как подошли к реализации
3. Краткие шаги реализации(написание такого то класса, его задача такая то)
4. что в итоге получили
5. Выигрышь
6. Недостатки
7. Итог

Желательно в каком нить текстовике, а не в вордовском или еще каком нить чудо-формате. Если не сложно,
то напишите ваши мыла мне в приват.

На основании ваших, я буду четко знать. Как действовали разные люди в разных ситуаций, отсюдова будет
плюс в изложении, что ученик будет видеть разносторонний подход
PM MAIL WWW ICQ Jabber   Вверх
Alexeis
Дата 8.8.2007, 21:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  ООП это невероятно удобная вещь, но рассказывать об основах нет смысла, гораздо полезнее было бы почитать о глубинах ООП. О том как это работает изнутри в Delphi. VCL - это вообще кладезь знаний, в нем можно найти столько интересных с практической точки зрения вещей! Почему оно работает так, а не иначе. Незнание этих механизмов как правило приводят к тупиковым ситуациям при проектировании систем типа - "потоки - VCL" или "Dll и VCL". 100 раз уже сказано на форуме, но и в 101 раз наступят на те же грабли. 
  Также интересная тема - потоки данных и т.е. наследники TStream. Многие до сих пор читают из файла при помощи AssignFile и мучаются с массивами. Объектная обработка данных - это целый шаг вперед.
  Объектная обработка ошибок и классы-исключения. Практические примеры.
  Сериализация объектов.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sentry
Дата 9.8.2007, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Code Monkey
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 29.1.2007
Где: Москва

Репутация: 2
Всего: 10



Цитата(Alexeis @  8.8.2007,  23:24 Найти цитируемый пост)
 о глубинах ООП. О том как это работает изнутри в Delphi

Например, о механизме вызова виртуальных функций, VMT и VPTR.

Цитата(Alexeis @  8.8.2007,  23:24 Найти цитируемый пост)
Сериализация объектов.

По сериализации объектов есть неплохая статья в RSDN. Советую ознакомиться.
PM MAIL   Вверх
SkillHunter
Дата 9.8.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.8.2007

Репутация: нет
Всего: нет



Цитата(Alexeis @  8.8.2007,  21:54 Найти цитируемый пост)
  Также интересная тема - потоки данных и т.е. наследники TStream. Многие до сих пор читают из файла при помощи AssignFile и мучаются с массивами.

Угу, угу, до сих пор мучаюсь, в упор не понимаю чем TStream лучше того же AssignFile или аналогичных API функций, которыми этот класс кстати и пользуется. smile 

Гради Буча читал но далеко не все понял слишком много воды, да и потом С++ я не особо понимаю, нам кроме основ на уровне A = B + C ничего не давали. А вот почитать про зеленых бегемотиков и с примерами на Делфи думаю было бы интересно. Статью в студию! smile 

Это сообщение отредактировал(а) SkillHunter - 9.8.2007, 12:29
PM MAIL ICQ   Вверх
Alexeis
Дата 9.8.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(SkillHunter @  9.8.2007,  12:18 Найти цитируемый пост)
Угу, угу, до сих пор мучаюсь, в упор не понимаю чем TStream лучше того же AssignFile или аналогичных API функций, которыми этот класс кстати и пользуется.

  Которыми кстати этот класс НЕ пользуется, и не может использовать, иначе имел бы те же ограничения что и AssignFile и т.д. TFileStream использует средства ОС под которой работает. 

Это сообщение отредактировал(а) Alexeis - 9.8.2007, 12:58


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ch0bits
Дата 9.8.2007, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Поддерживаю Alexeis. Нет смысла описывать основы, нужно копать вглубь.
Мне бы например были очень интересны конкретные тонкости реализаии на Delphi паттернов проектирования.
PM WWW   Вверх
EvilsInterrupt
Дата 9.8.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 3
Всего: 9



Ch0bits, Полностью не согласен с тобой! Потому что ты даже не прочитал, о чем речь! Тема не про основы дорогой!!! А про практическую сторону применения ООП! Покажи мне действительно знающих и эффектино применяющих ООП? Таких я тебе скажу
единицы!

Если я напишу статью, найдутся критики, но может найтись тот, который не только покритикует, но и продолжит мое дело - напишет
еще один мануал по практическому использованию ООП! И вот это мне и надо, мне нужны знания! Вечные споры про ООП на форумах,
вечные холивар, вечные "бегемоты" в книгах, знаний не дают. Ед. книга это Буч, который хоть как-то попытался дать практические
навыки

Еще раз подчеркну: Я практик, хочу иметь знания позволяющие применять мне теорию на практике
Точнее скажет В.Цой"Что будет стоить тысячи слов? Когда важна будет крепость руки." (с) гр. Кино

Можно сколь угодно много читать умных слов, но конечная цель прочтения этих слов - Практика!

По делу:
Пока найдет человек, который готов написать о том как он применя ООП при разработке компьютерных игр и чем ему помог ООП!
PM MAIL WWW ICQ Jabber   Вверх
Bose
Дата 9.8.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



О кстати о примерах. Я наконец вспонмил один случай, который можно коротко описать. Случай довольно банальный, но всё же:

Текущий проект мне достался в уже "готовом" виде. Там было около 40 форм(все наследовались от Tform), и нужно было вылизать доставшиеся в наследство глюки  и добавить кое-какую функциональность. 
В частности, нужно было убедится, что все DBLookupComboBox'ы в ракрывающемся списке показывают не меньше 8 записей, а также гарантировать что у всех у них включены определённые свойства. 

Вручную проверив форм 5 я понял что это не дело, и подумал, а не сделать ли так, чтобы эти свойства проставлялись автоматом при создании формы? Подумав ещё немного я постучал в свой программерский бубен чтобы заручиться благоволением духа ООП. И дух ООП посоветовал воспользоваться наследованием. 
Я создал юнит MyBaseForm.pas и в нём новый класс TmyBaseForm унаследованный от Tform
Код

TmyBaseForm = class(TForm)
end;


Дальше я последовательно обошёл все формы и в секции interface заменил строку вида 
Код

Tform1=class(TForm)
 на 
Код

Tform1=class(TmyBaseForm)

и добавил в uses секцию юнит MyBaseForm.

Теперь все формы наследуются не от стандартной Tform а от моей формы TMyBaseForm и для того, чтобы поменять какое-то поведение во всех формах, мне достаточно было написать нужный код в TMyBaseForm.

После замены я проверил, нормально ли собирается проект. Вроде всё нормально, ошибок нет.  smile 


Теперь возник вопрос, а где же писать код для автоматического выставления нужных свойств у DBLookupComboBox'ов? 

Для выставления свойств, я добавил метод PrepareLookupComboBoxes который проходит по всем DbLookupComboBox'ам формы и выставляет им нужные свойства. Я объявил этот метод в секции protected и добавил директиву virtual, чтобы оставить себе возможность изменить это поведение в конкретных формах.
Код

TmyBaseForm = class(TForm)
protected
  procedure PrepareLookupComboBoxes; virtual;
end;

...

procedure TmyBaseForm.PrepareLookupComboBoxes; 
var ii:integer;
begin
  for ii:=0 to self.ControlCount-1 do
    if self.Controls[ii] is TdbLookupComboBox then
    begin
       TdbLookupComboBox(self.Controls[ii]).Color:=clLime;
       TdbLookupComboBox(self.Controls[ii]).DropDownRows:=8;
    end; 
end;

Чтобы убедится что этот метод работает я добавил туда код заменяющий цвет комбо-бокса на ядовито-зелёный. 


Дальше у меня возник вопрос, а когда лучше всего вызывать этот код? 

Свойства, которые мне нужно было установить лучше всего устанавливать после того как будут открыты присоединённые к ним Datasetы. В большинстве форм, Datasetы открываются либо в событии формы OnCreate либо в OnShow. Значит, идеальный вариант - это вызывать PrepareLookupComboBoxes после того как сработает событие OnShow. 

Исследовав исходные код класса Tform я решил переопределить метод DoShow, который и отвечает за вызов события OnShow.

Код

TmyBaseForm = class(TForm)
protected
  procedure PrepareLookupComboBoxes; virtual;
  procedure DoShow; override; 
end;

...

procedure TmyBaseForm.DoShow;  
begin
  inherited; // сначала вызваем стандартный обработчик
  PrepareLookupComboBoxex; // а потом уже выставляем свои свойства
end;

procedure TmyBaseForm.PrepareLookupComboBoxes; 
var ii:integer;
begin
...
end;



В дальнейшем в класс TmyBaseForm было добавлено ещё много разных процедур, и он разросся настолько что пришлось вставлять ещё одного наследника, но это уже совсем другая сказка  smile 

Этод метод работает, но он не идеален, ибо наследует только кодовую часть, и игнорирует ресурсы.

Сорри, если где-то в тексте натупил... Я это не специально.  smile 




PM MAIL WWW Skype   Вверх
Yanis
Дата 9.8.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Bose
А нельзя было просто переопределить класс TDBLookupComboBox-а в отдельном модуле и прописать модуль первым?

Код
TDBLookupComboBox = class(DBCtrls.TDBLookupComboBox)
public
  constructor Create(AOwner: TComponent); override;
end;

{ TDBLookupComboBox }

constructor TDBLookupComboBox.Create(AOwner: TComponent);
begin
  inherited;
  DropDownRows := 8;
end;



--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Bose
Дата 9.8.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(Yanis @  9.8.2007,  18:05 Найти цитируемый пост)
А нельзя было просто переопределить класс TDBLookupComboBox-а в отдельном модуле и прописать модуль первым?

Не знаю, я не пробовал. Но не думаю, что это повлияет на ComboBox'ы у куоторых свойство DropDownRows было изменено в design-time. Впрочем, спасибо за идею. 

Yanis, проблема предыдущего поста была придумана. На деле задача была более обширна. Сейчас, вышеупомянутый TmyBaseForm помимо установки свойств отвечает за загрузку и сохранение положения сплиттеров, ширин столбцов в DBGrid'ах, положение Toolbarов, заполняет ImageList'ы картинками с диска, добавляет системное меню к форме и что-то там ещё делает... =)
PM MAIL WWW Skype   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.