На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.06.10 14:56
Оценка:
Всем привет.

Пишу очередную (четвертую) часть Язык Nemerle.
Данная часть должна быть посвящена ООП-у.

К сожалению, в голову не приходит хороших идей для демонстрации ООП-а.

Во второй и третьей части в основном разбиралась написание кода в функциональном стиле на базе примера "строчный калькулятор". Калькулятор в этих частях был консольным приложением. Логика калькулятора была написана практически полностью в функциональном стиле.

Я думал сделать WinForms-версию этого калькулятора, но оказалось, что это слишком простой пример, практически не демонстрирующий ООП. Вот как он выглядит:
using System.Windows.Forms;
using System.Drawing;

module Program
{
  Main() : void
  {
    def form               = Form();
    def expressionComboBox = ComboBox();
    def calculateButton    = Button();
    def resultTextBox      = TextBox();
    
    expressionComboBox.TabIndex  = 0;
    expressionComboBox.Bounds    = Rectangle(10, 10, 330, 30);
    
    calculateButton.AutoSize     = true;
    calculateButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
    calculateButton.TabIndex     = 1;
    calculateButton.Text         = "Calculate";
    calculateButton.Location     = Point(350, 10);
    
    resultTextBox.Location       = Point(10,  40);
    resultTextBox.Width          = calculateButton.Right - 20;
    resultTextBox.TabIndex       = 2;
    
    form.AcceptButton            = calculateButton;
    form.Text                    = "Calculator";

    form.Controls.Add(resultTextBox);
    form.Controls.Add(calculateButton);
    form.Controls.Add(expressionComboBox);

    form.ClientSize = Size(calculateButton.Right + 10, 
                           resultTextBox.Top + resultTextBox.Height + 10);
    
    calculateButton.Click += 
      fun(_, _)
      {
        def text = expressionComboBox.Text;
        def calc = CalcParser();
        
        def updateHistoryList()
        {
          def index = expressionComboBox.Items.IndexOf(text);
          
          when (index >= 0)
          {
            expressionComboBox.Items.RemoveAt(index);
            expressionComboBox.Text = text;
          }
            
          expressionComboBox.Items.Insert(0, text);
        }
        
        updateHistoryList();
        
        match (calc.ParseAndEval(text))
        {
          | Some(val) => resultTextBox.Text = val.ToString();
          | None      =>
            def (pos, msg) = calc.Error;
            
            resultTextBox.Text = msg;
            
            when (pos >= 0)
            {
              expressionComboBox.SelectionStart = pos;
              expressionComboBox.SelectionLength = 1;
              expressionComboBox.Select();
            }
        }
      };
    
    Application.EnableVisualStyles();
    Application.Run(form);
  }
}


Тут даже наследование не потребовалось (дизайнер форм им пользуется, но смысла в это — ноль).

Прошу подкинуть идей примеров в процессе реализации которых можно было бы продемонстрировать основные концепции ООП, точнее элементы языка используемые для поддержки ООП (они в Nemerle такие же как в C#).

Пример должен быть:
* Кратким. Я должен легко описать его в рамках одной статьи (10-15) страниц (по 5 тысяч знаков без учета пробелов).
* Он должен демонстрировать наследование, виртуальные методы, события. Хорошо бы, но не обязательно, чтобы он так же демонстрировал использование интерфейсов.
* Понятным.
* Не абстрактным и практичным. Меня самого всегда раздражало когда ООП подавали на совершенно не реалистичных примерах вроде построения иерархии животных или библиотеки графических примитивов (которые на практике никакого ООП не используют).
* Возможно, но не обязательно, связан с примером строчного калькулятор.

Одной из идей предложенной Воронковым было разработать электронную таблицу (аля сильно упрощенный Exel). Но боюсь, что это будет перебор.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: На базе чего лучше всего продемонстрировать ООП?
От: MozgC США http://nightcoder.livejournal.com
Дата: 07.06.10 15:49
Оценка:
Первое что пришло в голову из реальных проектов:
1) Сохранение отчетов в разных форматах: например в Excel, xml, html.
2) Переопределение методов вида OnSomeEvent(...)
3) Создание кастомных коллекций, типа ReadOnlyBindingList и т.д.
4) Базовый класс объектов предметной области, предоставляющий какую-то базовую функциональность, а уже унаследованные объекты перегружают методы типа Validate() и т.д.
5) Можно взять пример из BLT — базовый класс DataProviderBase и уже конкретные реализации провайдеров СУБД — MySqlDataProvider, OracleDataProvider и др., которые переопределяеют методы типа CreateConnectionObject и т.д.
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.06.10 16:05
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Первое что пришло в голову из реальных проектов:

MC>1) Сохранение отчетов в разных форматах: например в Excel, xml, html.

Каких отчетов? Где их взять. Материал рассчитан как минимум на новичков в языке. А по уму на новичков в программировании.

MC>2) Переопределение методов вида OnSomeEvent(...)

MC>3) Создание кастомных коллекций, типа ReadOnlyBindingList и т.д.

Это как раз задачи ради задач. Ничему хорошему на таких примерах не научишь. Я еще раз подчеркиваю, что нужны законченные, просты, понятные и (желательно) полезные примеры.

MC>4) Базовый класс объектов предметной области, предоставляющий какую-то базовую функциональность, а уже унаследованные объекты перегружают методы типа Validate() и т.д.


И что за предметная область? Что-то связанное с БД и учетом на предприятиях? Дык сначала придется всю подноготную придумывать и описывать.

MC>5) Можно взять пример из BLT — базовый класс DataProviderBase и уже конкретные реализации провайдеров СУБД — MySqlDataProvider, OracleDataProvider и др., которые переопределяеют методы типа CreateConnectionObject и т.д.


Примеры должны быть независимыми. Как можно объяснить ООП на базе огромных и сложных библиотек основанных на разных хитрых технологиях вроде деревьев выражений.

Пример с БД — идея не плохая, но не для части в которой дается ООП.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: На базе чего лучше всего продемонстрировать ООП?
От: BulatZiganshin  
Дата: 07.06.10 16:47
Оценка: 47 (4) +2 :))) :))) :))) :))) :))
Здравствуйте, VladD2, Вы писали:

VD>На базе чего лучше всего продемонстрировать ООП?


на базе хаскела. дать человек прочитать gentle introduction и затем сказать: ну, теперь ты понял, сынок, какая херня получаются когда люди пытаются обойтись без классов?
Люди, я люблю вас! Будьте бдительны!!!
Re: На базе чего лучше всего продемонстрировать ООП?
От: Куть  
Дата: 07.06.10 17:01
Оценка: 1 (1) +2 -1
Классический пример: векторный редактор — круги, прямоугольники, эллипсы. Переопределяется рисование, изменение масштаба, повороты и т.д. В базовом классе, например, перемещение.
Если слишком просто — можно прикрутить андо-редо и сериализацию.
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.06.10 17:54
Оценка: -1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>на базе хаскела. дать человек прочитать gentle introduction и затем сказать: ну, теперь ты понял, сынок, какая херня получаются когда люди пытаются обойтись без классов?


Смешно! Вот только форум не "Коллеги улыбнитесь"
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.06.10 17:57
Оценка: +1
Здравствуйте, Куть, Вы писали:

К>Классический пример: векторный редактор — круги, прямоугольники, эллипсы. Переопределяется рисование, изменение масштаба, повороты и т.д. В базовом классе, например, перемещение.


Классический пример чего? Ты видел как реально эти векторные редакторы делаются? Ни кто в жизни не додумается в реальном коде использовать ООП для векторной графики.

Это как раз и есть пример того что хотелось бы избежать. Я же даже перечислил это в теме. Вторым (точнее первым) примером является иерархия животных. Кошка.Голос(), Собака.Голос(). Бррррр!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: На базе чего лучше всего продемонстрировать ООП?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 08.06.10 02:56
Оценка: +4
Вообще, именно GUI — отличный пример для ООП. Где всякий контрол есть окно (т.е. объект), которое может получать сообщения и реагировать на них. И поведение можно наследовать и переопределять.

В принципе, когда в языке есть мощные средства помимо ООП, подходящих задач для него остается не так много. В основном это те, где нужно позднее связывание.
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: Pavel Dvorkin Россия  
Дата: 08.06.10 03:08
Оценка: 1 (1) +1
Здравствуйте, VladD2, Вы писали:

VD>Классический пример чего? Ты видел как реально эти векторные редакторы делаются? Ни кто в жизни не додумается в реальном коде использовать ООП для векторной графики.


Ты уж определись, что тебе надо — реальную жизнь или то, что ты писал чуть выше по треду

V>Материал рассчитан как минимум на новичков в языке. А по уму на новичков в программировании.


Эти вещи плохо совместимы.
With best regards
Pavel Dvorkin
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: dsorokin Россия  
Дата: 08.06.10 04:51
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Классический пример чего? Ты видел как реально эти векторные редакторы делаются? Ни кто в жизни не додумается в реальном коде использовать ООП для векторной графики.


Я написал один такой редактор для диаграмм. И ничего. Там ООП. Очень удобно для разделения логики.

Тут, наверное, надо смотреть на особенности мышления конкретного человека. Кого-то тошнит от примеров с числами Фибоначчи. А кому-то такие абстрактные примеры помогают постичь суть вещей, ибо сами числа Фибоначчи почти не несут дополнительной нагрузки. Так и с примером наследования для фигур. Кому-то нравятся. Кому-то нет. Меня, например, слегка бесят примеры, перегруженные, как правило, чужой и чуждой мне "практикой".
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 08.06.10 07:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Классический пример чего? Ты видел как реально эти векторные редакторы делаются? Ни кто в жизни не додумается в реальном коде использовать ООП для векторной графики.


И тем не менее, есть HotDraw by Kent Beck & Ward Cunningham. Я естественно допускаю, что нечто написанное в середине 80-х и без Nemerle не может служить примером объектной-ориентированности, но люди его на патерны разбирали (и тот текст всё еще можно найти).
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: BulatZiganshin  
Дата: 08.06.10 10:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Смешно! Вот только форум не "Коллеги улыбнитесь"


а ты на работе и не улыбаешься вовсе поскольку пришёл туда работать?
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.10 10:39
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>И тем не менее, есть HotDraw by Kent Beck & Ward Cunningham. Я естественно допускаю, что нечто написанное в середине 80-х и без Nemerle не может служить примером объектной-ориентированности, но люди его на патерны разбирали (и тот текст всё еще можно найти).


Ага. В мире много чего есть. Только вот библиотеки которые писались в начале этого века (т.е. когда в ООП уже наигрались) все как одна для вывода графики используют банальные функции. И это совершенно логично. Нет никакой связи между точкой и линией, линией и квадратом, и уж точно нет связи между квадратом и прямоугольником. Их проще сделать независимыми.

В общем, это совершенно натянутое использование ООП. А хочется показать что-то где ООП к месту. Плюс этот что-то должно быть интересным людям.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.10 10:45
Оценка:
Здравствуйте, dsorokin, Вы писали:

D>Я написал один такой редактор для диаграмм. И ничего. Там ООП. Очень удобно для разделения логики.


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

ООП нужен там где есть симуляция чего-то. Вот в том же WPF ООП к месту. Но только на верхнем уровне, а внизу (где та самая графика), там к месту процедурная реализация.

D>Тут, наверное, надо смотреть на особенности мышления конкретного человека. Кого-то тошнит от примеров с числами Фибоначчи.


Ага. Меня, например.

D>А кому-то такие абстрактные примеры помогают постичь суть вещей, ибо сами числа Фибоначчи почти не несут дополнительной нагрузки.


Взглянуть бы на них.

D> Так и с примером наследования для фигур. Кому-то нравятся. Кому-то нет. Меня, например, слегка бесят примеры, перегруженные, как правило, чужой и чуждой мне "практикой".


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

Проблема бессмысленных (их ошибочно называют "абстрактными") примеров в том, что люди даже поняв их не могу потом применить новые знания на практике.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: BulatZiganshin  
Дата: 08.06.10 10:46
Оценка: 45 (1)
Здравствуйте, D. Mon, Вы писали:

DM>Вообще, именно GUI — отличный пример для ООП. Где всякий контрол есть окно (т.е. объект), которое может получать сообщения и реагировать на них. И поведение можно наследовать и переопределять.


для начала бы не помешало выяснить какое ООП мы вообще собираемся демонстрировать. ибо оно бывает весьма разным

исходя из языка, я думаю что Владу нужна иерархия классов, где вводятся новые данные и переопределяются методы. проблема как мне кажется в том, что такое — полноценное — использование ООП требуется в достаточно больших проектах. больших, чем влезет в учебный пример. если нужно просто иметь несколько объектов с разной реализацией, то вполне хватит полиморфизма с лямбдами

у меня лично в прикладной программе наиболее развитаяиерархия классов была когда я делал иерархию типов форм в изнес-приложении. что-то в таком духе:

любая форма
-диалог запроса
-форма с источником данных
--то же + data grid
--то же плюс кнопки ok/cancel/apply/undo для ред-ния одной записи

только там больше было, штук 10-20
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.10 10:47
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

VD>>Смешно! Вот только форум не "Коллеги улыбнитесь"


BZ>а ты на работе и не улыбаешься вовсе поскольку пришёл туда работать?


Улыбаюсь иногда. Но приходя в форум за советом, как-то не до смеха. Тем более что хороших советов пока нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: На базе чего лучше всего продемонстрировать ООП?
От: BulatZiganshin  
Дата: 08.06.10 10:50
Оценка: :)
Здравствуйте, VladD2, Вы писали:

BZ>>а ты на работе и не улыбаешься вовсе поскольку пришёл туда работать?


VD>Улыбаюсь иногда.


нельзя так Влад. улыбаясь на работе, ты крадёшь деньги работодателя!

да и вообще — предлагаю во всех раздела форума отменить смайлы для твоего личного удобства
Люди, я люблю вас! Будьте бдительны!!!
Re[5]: На базе чего лучше всего продемонстрировать ООП?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 08.06.10 11:16
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ага. В мире много чего есть. Только вот библиотеки которые писались в начале этого века (т.е. когда в ООП уже наигрались) все как одна для вывода графики используют банальные функции. И это совершенно логично. Нет никакой связи между точкой и линией, линией и квадратом, и уж точно нет связи между квадратом и прямоугольником. Их проще сделать независимыми.


Связь между существованием линий и методой ООП не раскрыта. Её, кстати, и нет — так что не ищи.
Ты хочешь "то не знаю что" — но где же это взять.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re: На базе чего лучше всего продемонстрировать ООП?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 08.06.10 13:39
Оценка: 45 (1)
Здравствуйте, VladD2, Вы писали:

Generic alpha-beta перебор, заточенный под любую игру. Ну и выбрать пару игр, чтобы была иерархия.

Получаем примерно следующее:
интерфейс IGame, в котором реализуется NewGame, DoMove, [UndoMove,] GenMoves, State
абстрактный класс TGame8x8 (игра на доске 8x8 или около того)
классы TChess, TDraught, ...
класс TAlphaBetaEngine, который реализует alpha+beta перебор, и в котором есть куча event-ов на те или иные события, связанные с визуализацией поиска: изменение текущего хода, глубина, процент, ...
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: BulatZiganshin  
Дата: 08.06.10 14:18
Оценка: +1
Здравствуйте, Mystic, Вы писали:

M>Generic alpha-beta перебор, заточенный под любую игру. Ну и выбрать пару игр, чтобы была иерархия.


и получится банальное делегирование которое подходит и под ФП, и под банальные указатели на функции
Люди, я люблю вас! Будьте бдительны!!!
Re: На базе чего лучше всего продемонстрировать ООП?
От: bnk СССР http://unmanagedvisio.com/
Дата: 08.06.10 14:32
Оценка: 45 (1)
Здравствуйте, VladD2, Вы писали:

VD>Пример должен быть:

VD>* Кратким. Я должен легко описать его в рамках одной статьи (10-15) страниц (по 5 тысяч знаков без учета пробелов).
VD>* Он должен демонстрировать наследование, виртуальные методы, события. Хорошо бы, но не обязательно, чтобы он так же демонстрировал использование интерфейсов.
VD>* Понятным.
VD>* Не абстрактным и практичным. Меня самого всегда раздражало когда ООП подавали на совершенно не реалистичных примерах вроде построения иерархии животных или библиотеки графических примитивов (которые на практике никакого ООП не используют).
VD>* Возможно, но не обязательно, связан с примером строчного калькулятор.

Может игру какую простую взять, типа тетриса или арканоида с несколькими уровнями.
Re[5]: На базе чего лучше всего продемонстрировать ООП?
От: dsorokin Россия  
Дата: 08.06.10 14:36
Оценка:
Здравствуйте, VladD2, Вы писали:

D>>А кому-то такие абстрактные примеры помогают постичь суть вещей, ибо сами числа Фибоначчи почти не несут дополнительной нагрузки.


VD>Взглянуть бы на них.


На примере этих чисел очень хорошо постигать потоки. Те самые, которые мы дружно выпилили из самой первой версии comp, заменив дотнетовским yield.
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.10 16:27
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, VladD2, Вы писали:


M>Generic alpha-beta перебор, заточенный под любую игру. Ну и выбрать пару игр, чтобы была иерархия.


Игра — это само по себе неплохая идея!
А вот с "Generic alpha-beta перебором" не знаком, к сожалению. В чем его прелесть?
Имеется в виду вот это: http://en.wikipedia.org/wiki/Alpha-beta_pruning ?

M>Получаем примерно следующее:

M> интерфейс IGame, в котором реализуется NewGame, DoMove, [UndoMove,] GenMoves, State
M> абстрактный класс TGame8x8 (игра на доске 8x8 или около того)

Играем в шахматы? Не круто ли для примера?

M> классы TChess, TDraught, ...

M> класс TAlphaBetaEngine, который реализует alpha+beta перебор, и в котором есть куча event-ов на те или иные события, связанные с визуализацией поиска: изменение текущего хода, глубина, процент, ...

Это уже точно перебор.

Но сама идея использовать игру в качестве примера — это хорошая идея. Игра — это почти всегда симуляция. А где есть симуляция, там ООП подходит отлично. Подумаю над этим вопросом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.10 16:34
Оценка: +1
Здравствуйте, dsorokin, Вы писали:

D>На примере этих чисел очень хорошо постигать потоки. Те самые, которые мы дружно выпилили из самой первой версии comp, заменив дотнетовским yield.


Это перебор уже. Вот идея использовать игру для введения ООП-фич мне больше нравится.

Пока что есть две версии:
1. Простенькая электронная табличка. Плюс в том, что в ней можно использовать строчный калькулятор из предыдущих частей.
2. Простенькая игрушка. Плюс в том, что игры — это это почти всегда симуляция, а симуляция — это идеальное поле для применения ООП.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: Воронков Василий Россия  
Дата: 08.06.10 16:37
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>исходя из языка, я думаю что Владу нужна иерархия классов, где вводятся новые данные и переопределяются методы. проблема как мне кажется в том, что такое — полноценное — использование ООП требуется в достаточно больших проектах. больших, чем влезет в учебный пример. если нужно просто иметь несколько объектов с разной реализацией, то вполне хватит полиморфизма с лямбдами


Кстати, ценная мысль. Более того, во многих случаях — особенно на функциональном-то языке, — как раз не имеет смысл писать в ООП-стиле, по сути код разбухнет, понятность пострадает, а толку — ноль. А так как речь идет о новичках и примере, который "влезет" в статью (причем Влад чуть ли не хочет, чтобы *весь* код примера приводился в статье), то можно ненароком "научить их плохому".

Поэтому ИМХО тут два варианта — либо кошки с собаками, либо брать-таки ГУЙ и писать задачу, связанную с расширением функционала какого-нибудь контрола, имеющего ООП-ный дизайн (т.е. ситуацию, где мы *вынуждены* использовать ООП). Собственно, мой вариант — расширение вполне себе ООП-ного DataGridView из вин-формсов.
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.10 16:58
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Вообще, именно GUI — отличный пример для ООП. Где всякий контрол есть окно (т.е. объект), которое может получать сообщения и реагировать на них. И поведение можно наследовать и переопределять.


Это я и сам понимаю. Но проблема в том, том что в простых случаях как-то ООП (по крайней мере бенефиты от него) не видны, а сложные случаи уже плохо применимы в качестве примеров. Не могу же я скажем редактор текста привести как пример?

DM>В принципе, когда в языке есть мощные средства помимо ООП, подходящих задач для него остается не так много. В основном это те, где нужно позднее связывание.


Ну, почему же? Везде где есть симуляция чего либо или даже просто много состояния меняющегося от внешних воздействий ООП будет очень кстати. Вопрос в том, что нужен простой пример демонстрирующий это. А вот с этим проблема.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.10 17:03
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>для начала бы не помешало выяснить какое ООП мы вообще собираемся демонстрировать. ибо оно бывает весьма разным


BZ>исходя из языка, я думаю что Владу нужна иерархия классов, где вводятся новые данные и переопределяются методы.


Именно. Язык ведь базируется на дотнете где ООП классовый.

BZ>проблема как мне кажется в том, что такое — полноценное — использование ООП требуется в достаточно больших проектах.


Именно.

BZ> больших, чем влезет в учебный пример. если нужно просто иметь несколько объектов с разной реализацией, то вполне хватит полиморфизма с лямбдами


Ага. Более того. Тот же ГУЙ, как оказалось клепается в ВинФормс на событиях (которые тоже ссылки на фунции, по большому счету) и при этом нет нужды ни в наследовании, ни в переопределении методов.

BZ>у меня лично в прикладной программе наиболее развитаяиерархия классов была когда я делал иерархию типов форм в изнес-приложении. что-то в таком духе:


BZ>любая форма

BZ>-диалог запроса
BZ>-форма с источником данных...

Дык не повторять же реализацию ВинФормсов только для того чтобы продемонстрировать ООП? Хотя это было бы как раз весьма неплохим примером.

Пока что я схожусь на двух вариантах — контрол (аля микро Ёксель) и какая-нибудь простенькая игрушка.
Контрол позволит повторно использовать пример калькулятора из предыдущих частей, а игрушка просто наглядна.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.10 17:09
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>нельзя так Влад. улыбаясь на работе, ты крадёшь деньги работодателя!


Ага. Причем самое обидное, что это как раз и есть мои деньги .

BZ>да и вообще — предлагаю во всех раздела форума отменить смайлы для твоего личного удобства


ОК. Подумаем над этим предложением.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.10 17:13
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Ты уж определись, что тебе надо — реальную жизнь или то, что ты писал чуть выше по треду


Цитирую себя любимого:

Пример должен быть:
* Кратким. Я должен легко описать его в рамках одной статьи (10-15) страниц (по 5 тысяч знаков без учета пробелов).
* Он должен демонстрировать наследование, виртуальные методы, события. Хорошо бы, но не обязательно, чтобы он так же демонстрировал использование интерфейсов.
* Понятным.
* Не абстрактным и практичным. Меня самого всегда раздражало когда ООП подавали на совершенно не реалистичных примерах вроде построения иерархии животных или библиотеки графических примитивов (которые на практике никакого ООП не используют).
* Возможно, но не обязательно, связан с примером строчного калькулятор.


V>>Материал рассчитан как минимум на новичков в языке. А по уму на новичков в программировании.


PD>Эти вещи плохо совместимы.


Знаю. Иначе бы и вопросы не задавал. Но ведь решать простые задачи не интересно!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.06.10 17:18
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

VD>>Ага. В мире много чего есть. Только вот библиотеки которые писались в начале этого века (т.е. когда в ООП уже наигрались) все как одна для вывода графики используют банальные функции. И это совершенно логично. Нет никакой связи между точкой и линией, линией и квадратом, и уж точно нет связи между квадратом и прямоугольником. Их проще сделать независимыми.


ANS>Связь между существованием линий и методой ООП не раскрыта. Её, кстати, и нет — так что не ищи.

ANS>Ты хочешь "то не знаю что" — но где же это взять.

Ну, естественно! Если бы я знал, что я хочу, то зачем мне тему по этому поводу создавать?

ЗЫ

Взглянул на твою ссылку и понял, что речь идет редакторе, а не о графической библиотеке. Редактор — это интерактивная среда симуляции. Он действительно на ООП ложится не плохо. Проблема только в том, что это крупновато для примера.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: На базе чего лучше всего продемонстрировать ООП?
От: frontsquat  
Дата: 08.06.10 17:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ага. В мире много чего есть. Только вот библиотеки которые писались в начале этого века (т.е. когда в ООП уже наигрались) все как одна для вывода графики используют банальные функции. И это совершенно логично. Нет никакой связи между точкой и линией, линией и квадратом, и уж точно нет связи между квадратом и прямоугольником. Их проще сделать независимыми.


VD>В общем, это совершенно натянутое использование ООП. А хочется показать что-то где ООП к месту. Плюс этот что-то должно быть интересным людям.


ООП к месту лишь в узком специализированном классе задач. Например, моделирование. Вряд ли это простой класс задач, подходящий для ваших целей. А в большинстве случаев ООП неуместно, криво, искусственно притянуто за уши. Поэтому лучше вообще не приводите пример с ООП.
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: WolfHound  
Дата: 08.06.10 17:50
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Но сама идея использовать игру в качестве примера — это хорошая идея. Игра — это почти всегда симуляция. А где есть симуляция, там ООП подходит отлично. Подумаю над этим вопросом.

С играми есть проблема. К ним еверты прикручивать некуда.
Но если таки делать игру думаю тут лучше всего подойдет стрелялка типа этой http://armorgames.com/play/1920/bubble-tanks-2
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: На базе чего лучше всего продемонстрировать ООП?
От: WolfHound  
Дата: 08.06.10 17:53
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>1. Простенькая электронная табличка. Плюс в том, что в ней можно использовать строчный калькулятор из предыдущих частей.

Это плохой пример для ООП
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: На базе чего лучше всего продемонстрировать ООП?
От: WolfHound  
Дата: 08.06.10 17:53
Оценка:
Здравствуйте, frontsquat, Вы писали:

F>ООП к месту лишь в узком специализированном классе задач. Например, моделирование. Вряд ли это простой класс задач, подходящий для ваших целей. А в большинстве случаев ООП неуместно, криво, искусственно притянуто за уши. Поэтому лучше вообще не приводите пример с ООП.

Моделирование мира в игрушке вполне подходит.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 08.06.10 19:08
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Классический пример чего? Ты видел как реально эти векторные редакторы делаются? Ни кто в жизни не додумается в реальном коде использовать ООП для векторной графики.


Ты в WPF то заглядывал ?

VD>Это как раз и есть пример того что хотелось бы избежать. Я же даже перечислил это в теме. Вторым (точнее первым) примером является иерархия животных. Кошка.Голос(), Собака.Голос(). Бррррр!


Ну например простой случай — синглпейн аутлайнер с фолдингом.

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

для C# есть такой пример, правда аппликация чуток другая, но как раз для статьи была сделана.

Ну или попробуй таки сделать редактор векторной графики. Не хочешь векторной — сделай редактор графов
добавление узлов, ребер,
всякие мышиные операции для редактирования как драг-дроп, соединение и тд
сворачивание/разворачивание подграфов,
прикрепляемые свойства у элементов,
возможность запускать разные алгОритмы на графе/подграфе
загрузка, сохранение модели
Re[7]: На базе чего лучше всего продемонстрировать ООП?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 08.06.10 19:12
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Пока что есть две версии:

VD>1. Простенькая электронная табличка. Плюс в том, что в ней можно использовать строчный калькулятор из предыдущих частей.

Хорошо бы увидеть в этой проге хорошую аутомейшн модел, что бы можно было в рантаме запускать всякую всячину прямо на немерле и таким образм тренироваться
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 08.06.10 19:23
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Mystic, Вы писали:


M>>Здравствуйте, VladD2, Вы писали:


VD>А вот с "Generic alpha-beta перебором" не знаком, к сожалению. В чем его прелесть?

VD>Имеется в виду вот это: http://en.wikipedia.org/wiki/Alpha-beta_pruning ?

Да, это. Но можно и полный перебор, будет чуть короче

VD>Играем в шахматы? Не круто ли для примера?


Да можно хоть крестики-нолики сделать. Основная задача выбрать две игры, чтобы их реализации хоть немного пересекались. Можно, например, крестики-нолики 3x3 взять, у Гарднера много вариантнов: обычные крестики-нолики, обратные крестики-нолики, где тот кто поставил три крестика или нолика в ряд, тот проиграл. Вариант, где каждый выставляет как крестики, так и нолики, задача одного игрока выиграть, другого сделать ничью. И т. д. и т. п.
Re: На базе чего лучше всего продемонстрировать ООП?
От: BulatZiganshin  
Дата: 08.06.10 19:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Прошу подкинуть идей примеров в процессе реализации которых можно было бы продемонстрировать основные концепции ООП, точнее элементы языка используемые для поддержки ООП (они в Nemerle такие же как в C#).


классические примеры ООП-иерархий: исключения, контейнеры (пример в STL), потоки в/в (кажись в delphi/vcl было наворочено), элементарные типы данных (как ни смешно, в хаскеле охрененная иерархия тайпклассов для чисел)
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: На базе чего лучше всего продемонстрировать ООП?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 08.06.10 19:31
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>С играми есть проблема. К ним еверты прикручивать некуда.


event-ы естественным образом прикручиваются как визуализация процесса перебора. Например, изменился лучший ход, увеличилась глубина перебора, поменялась оценка.
Re[5]: На базе чего лучше всего продемонстрировать ООП?
От: Pavel Dvorkin Россия  
Дата: 09.06.10 05:34
Оценка: 12 (2) :)
Здравствуйте, VladD2, Вы писали:

VD>Цитирую себя любимого:

VD>

VD>Пример должен быть:
VD>* Кратким. Я должен легко описать его в рамках одной статьи (10-15) страниц (по 5 тысяч знаков без учета пробелов).
VD>* Он должен демонстрировать наследование, виртуальные методы, события. Хорошо бы, но не обязательно, чтобы он так же демонстрировал использование интерфейсов.
VD>* Понятным.
VD>* Не абстрактным и практичным. Меня самого всегда раздражало когда ООП подавали на совершенно не реалистичных примерах вроде построения иерархии животных или библиотеки графических примитивов (которые на практике никакого ООП не используют).
VD>* Возможно, но не обязательно, связан с примером строчного калькулятор.


Объявление в одном американском кафе.

Мы вас обслужим качественно, быстро и недорого. Выберите любые 2 из этих 3 требований.
With best regards
Pavel Dvorkin
Re[8]: На базе чего лучше всего продемонстрировать ООП?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.06.10 09:32
Оценка: -1
Здравствуйте, WolfHound, Вы писали:

VD>>1. Простенькая электронная табличка. Плюс в том, что в ней можно использовать строчный калькулятор из предыдущих частей.

WH>Это плохой пример для ООП

Это отличный пример, а вот игрушка это отстой.
Re[9]: На базе чего лучше всего продемонстрировать ООП?
От: WolfHound  
Дата: 09.06.10 10:05
Оценка: -1 :)
Здравствуйте, Ikemefula, Вы писали:

VD>>>1. Простенькая электронная табличка. Плюс в том, что в ней можно использовать строчный калькулятор из предыдущих частей.

WH>>Это плохой пример для ООП
I>Это отличный пример, а вот игрушка это отстой.
Электронная таблица это функциональный язык. Так что тут ООП вообще никак и ни о чем.
А вот игрушка это симуляция игрового мира. Симуляция это единственная задача где ООП рулит.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: На базе чего лучше всего продемонстрировать ООП?
От: MasterZiv СССР  
Дата: 09.06.10 10:33
Оценка:
VladD2 wrote:

> Пишу очередную (четвертую) часть Язык Nemerle

> Данная часть должна быть посвящена ООП-у.
>
> К сожалению, в голову не приходит хороших идей для демонстрации ООП-а.

Объясняй на примере сериализации (записи и чтения) объектов
разнообразного вида в потоки разной природы.
Самое оно то.
Posted via RSDN NNTP Server 2.1 beta
Re[10]: На базе чего лучше всего продемонстрировать ООП?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.06.10 11:08
Оценка:
Здравствуйте, WolfHound, Вы писали:

I>>Это отличный пример, а вот игрушка это отстой.

WH>Электронная таблица это функциональный язык. Так что тут ООП вообще никак и ни о чем.



сама таблица вобщем то мало интересует, интересует полноценное приложение с этой таблицей

http://msdn.microsoft.com/en-us/library/ms973253.aspx

Нужен вот такой пример только в качестве документа не текстовый редактор, а таблицу.

В данном примере кода слишком много и не все реально используется, даже на С# можно сделать компактнее
Re[8]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.10 19:07
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Хорошо бы увидеть в этой проге хорошую аутомейшн модел, что бы можно было в рантаме запускать всякую всячину прямо на немерле и таким образм тренироваться


Сдается мне, что это все равно как в качестве задач по механике приводить устройство современного танка.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: На базе чего лучше всего продемонстрировать ООП?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.06.10 19:29
Оценка:
Здравствуйте, VladD2, Вы писали:

I>>Хорошо бы увидеть в этой проге хорошую аутомейшн модел, что бы можно было в рантаме запускать всякую всячину прямо на немерле и таким образм тренироваться


VD>Сдается мне, что это все равно как в качестве задач по механике приводить устройство современного танка.


У дядьки вот здесь очень неплохо вышло
Re[10]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.10 20:24
Оценка:
Здравствуйте, Ikemefula, Вы писали:

D>>Сдается мне, что это все равно как в качестве задач по механике приводить устройство современного танка.


I> У дядьки вот здесь очень неплохо вышло


Ага. Отличный пример! Ни одного упоминания virtual/oveeride/abstact/interface. ООП во всей красе... по вордовски.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.10 20:26
Оценка: :))) :)
Здравствуйте, MasterZiv, Вы писали:

MZ>Объясняй на примере сериализации (записи и чтения) объектов

MZ>разнообразного вида в потоки разной природы.
MZ>Самое оно то.

А сериализовать иерархию животных?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: На базе чего лучше всего продемонстрировать ООП?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.06.10 20:39
Оценка:
Здравствуйте, VladD2, Вы писали:

I>> У дядьки вот здесь очень неплохо вышло


VD>Ага. Отличный пример! Ни одного упоминания virtual/oveeride/abstact/interface. ООП во всей красе... по вордовски.


У него немного другая задача была — показать модель, все тож самое можно сделать для демонстрации ООП
Re[12]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.10 20:45
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>У него немного другая задача была — показать модель, все тож самое можно сделать для демонстрации ООП


Дык вот у меня задача иная. И твой пример отлично показал, что ее трудно решить на базе таких примеров.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: На базе чего лучше всего продемонстрировать ООП?
От: FR  
Дата: 10.06.10 05:02
Оценка: 13 (1)
Здравствуйте, VladD2, Вы писали:


VD>Прошу подкинуть идей примеров в процессе реализации которых можно было бы продемонстрировать основные концепции ООП, точнее элементы языка используемые для поддержки ООП (они в Nemerle такие же как в C#).


Поищи книжку Тимоти Бадд Объектно-ориентированное программирование в действии. Хоть в ней есть немало спорного, но по моему она
очень хороша для начинающих, и главное в ней куча примеров, вполне тебе подходящих, например решение задачи о восьми ферьзях в ООП
стиле или игры бильярд, пасьянс.
Re[10]: На базе чего лучше всего продемонстрировать ООП?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 10.06.10 05:05
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Электронная таблица это функциональный язык. Так что тут ООП вообще никак и ни о чем.


Плохому танцору... того...
Как бы, с борландами, и с C++ и с ObjectPascal ходил Calc, если мне склероз не изменяет. С мордой на TurboVision. Как я помню исходники были маленькими.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re: На базе чего лучше всего продемонстрировать ООП?
От: Ligen Украина http://zone-of-ambiguity.blogspot.com/
Дата: 10.06.10 08:09
Оценка:
Здравствуйте, VladD2, Вы писали:

Я когда то занимался с учеником по основам проектирования — писали змейку классическую ****@
Рекомендую, очень простое ТЗ и море удовольствия

VD>Пример должен быть:

VD>* Кратким. Я должен легко описать его в рамках одной статьи (10-15) страниц (по 5 тысяч знаков без учета пробелов).
VD>* Он должен демонстрировать наследование, виртуальные методы, события. Хорошо бы, но не обязательно, чтобы он так же демонстрировал использование интерфейсов.
VD>* Понятным.
VD>* Не абстрактным и практичным. Меня самого всегда раздражало когда ООП подавали на совершенно не реалистичных примерах вроде построения иерархии животных или библиотеки графических примитивов (которые на практике никакого ООП не используют).
VD>* Возможно, но не обязательно, связан с примером строчного калькулятор.

VD>Одной из идей предложенной Воронковым было разработать электронную таблицу (аля сильно упрощенный Exel). Но боюсь, что это будет перебор.
Viva el Junta Militar! Viva el Presidente!
Re[11]: На базе чего лучше всего продемонстрировать ООП?
От: WolfHound  
Дата: 10.06.10 11:56
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

WH>>Электронная таблица это функциональный язык. Так что тут ООП вообще никак и ни о чем.

ANS>Плохому танцору... того...
ANS>Как бы, с борландами, и с C++ и с ObjectPascal ходил Calc, если мне склероз не изменяет. С мордой на TurboVision. Как я помню исходники были маленькими.
На функциональном языке были бы еще меньше.
Я конечно понимаю что люди у которых ООПГМ пихают ООП куда попало и думают что ничего лучше не придумать...
Но по факту единственный класс задач которые ООП решает лучше чем другие подходы это симуляции вообще и игры (не все) в частности.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: На базе чего лучше всего продемонстрировать ООП?
От: WolfHound  
Дата: 10.06.10 11:56
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>сама таблица вобщем то мало интересует, интересует полноценное приложение с этой таблицей

Для этой статьи нужен маленький пример.

I>http://msdn.microsoft.com/en-us/library/ms973253.aspx

I>Нужен вот такой пример только в качестве документа не текстовый редактор, а таблицу.
I>В данном примере кода слишком много и не все реально используется, даже на С# можно сделать компактнее
В данном примере нужно не ООП а реактивное программирование.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: На базе чего лучше всего продемонстрировать ООП?
От: Lonely Dog Россия  
Дата: 10.06.10 12:01
Оценка:
Здравствуйте, VladD2, Вы писали:

Привет!
Я в качестве одного из примеров ООП описываю сетевое приложение. Ну или программу для конвертации чего-либо куда-нибудь

Чуть подробнее: есть сетевое приложение (общается по сокетам, файл перегоняет). Оборачиваем посылку данных в класс с определенным интерфейсом. Например вот так:
class IDataProcessor
{
 virtual void SendData(std::vector<BYTE> &vData) = 0;
 virtual void ReceiveData(std::vector<BYTE> &vData) = 0;
}

Т.о. образом IDataProcessor отвечает за отправку и получение данных. Появляется класс CNetworkDataProcessor, отправляющий данные по сети. CCompositeDataProcessor, отвечающий за вызов нескольких IDataProcessor по очереди. Появляется CCompressDataProcessor для сжатия и CEncryptDataProcessor для шифрования данных. Скорее всего тебе лучше использовать не сеть, а просто сохранение данных в файл.

Надеюсь,навел на интересные мысли
Re[12]: На базе чего лучше всего продемонстрировать ООП?
От: Klapaucius  
Дата: 10.06.10 12:25
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Но по факту единственный класс задач которые ООП решает лучше чем другие подходы это симуляции вообще и игры (не все) в частности.


А чем вышеупомянутое реактивное программирование хуже ООП для симуляции вообще и игр в частности?
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 10.06.10 12:33
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>Чуть подробнее: есть сетевое приложение (общается по сокетам, файл перегоняет). Оборачиваем посылку данных в класс с определенным интерфейсом. Например вот так:

LD>
LD>class IDataProcessor
LD>{
LD> virtual void SendData(std::vector<BYTE> &vData) = 0;
LD> virtual void ReceiveData(std::vector<BYTE> &vData) = 0;
LD>}
LD>

LD>Т.о. образом IDataProcessor отвечает за отправку и получение данных. Появляется класс CNetworkDataProcessor, отправляющий данные по сети. CCompositeDataProcessor, отвечающий за вызов нескольких IDataProcessor по очереди.

Интересно, а что делает CCompositeDataProcessor при вызове ReceiveData? Опрашивает несколько IDataProcessor по очереди?

LD>Надеюсь,навел на интересные мысли


ООП — не самое элегантное решение этой задачи
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: Lonely Dog Россия  
Дата: 10.06.10 13:01
Оценка:
Здравствуйте, samius, Вы писали:

S>Интересно, а что делает CCompositeDataProcessor при вызове ReceiveData? Опрашивает несколько IDataProcessor по очереди?

Ну да. Это как стек драйверов. При посылке данных идем сверху вниз. При получении наоборот.

LD>>Надеюсь,навел на интересные мысли


S>ООП — не самое элегантное решение этой задачи

1. Как бы вы ее решили?
2. Постановка задачи проста и понятна. Решение в целом тоже.
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.06.10 13:09
Оценка:
Здравствуйте, FR, Вы писали:

FR>например решение задачи о восьми ферьзях в ООП


Боюсь, что на этом примере можно продемонстрировать только то, что для логических задачах лучше использовать Пролог, а не ООП.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: На базе чего лучше всего продемонстрировать ООП?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 10.06.10 13:10
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>Здравствуйте, samius, Вы писали:


S>>Интересно, а что делает CCompositeDataProcessor при вызове ReceiveData? Опрашивает несколько IDataProcessor по очереди?

LD>Ну да. Это как стек драйверов. При посылке данных идем сверху вниз. При получении наоборот.
Как комбинируются результаты?

LD>>>Надеюсь,навел на интересные мысли


S>>ООП — не самое элегантное решение этой задачи

LD>1. Как бы вы ее решили?
В ФП задача решалась бы композицией функций.

LD>2. Постановка задачи проста и понятна. Решение в целом тоже.

Но неясна роль объекта.
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.06.10 13:11
Оценка:
Здравствуйте, Ligen, Вы писали:

L>Я когда то занимался с учеником по основам проектирования — писали змейку классическую ****@

L>Рекомендую, очень простое ТЗ и море удовольствия

А где-то уже на код такой игрушки можно глянуть?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: На базе чего лучше всего продемонстрировать ООП?
От: WolfHound  
Дата: 10.06.10 13:17
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>А чем вышеупомянутое реактивное программирование хуже ООП для симуляции вообще и игр в частности?

Хотябы тем что отсутствуют связи межу объектами.
А если ввести кучу исскуственных связей то мы получим проблемы с производительностью на ровном месте.
Возмем к примеру http://ru.wikipedia.org/wiki/Crimsonland
Попробуй представить реализацию проверки попдания пули по монстру используя реактивное программирование.

Единственное куда в игрушках напрашивается РП это реализация сильно заскриптованных сцен как вот тут: State-Based Scripting in Uncharted 2: Among Thieves [40MB PDF]
В данном случае авторы обошлись корутинами но ИМХО РП тут просто напрашивается.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.06.10 13:34
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>Я в качестве одного из примеров ООП описываю сетевое приложение. Ну или программу для конвертации чего-либо куда-нибудь


Проблема в том, что эти задачи в разы лучше решаются с помощью ФП.

Тут все элементрано. Задачи трансформации лучше решать с помощью ФП. Задачи симуляции — с помощью ООП.

LD>Чуть подробнее: есть сетевое приложение (общается по сокетам, файл перегоняет). Оборачиваем посылку данных в класс с определенным интерфейсом. Например вот так:

LD>
LD>class IDataProcessor
LD>{
LD> virtual void SendData(std::vector<BYTE> &vData) = 0;
LD> virtual void ReceiveData(std::vector<BYTE> &vData) = 0;
LD>}
LD>

LD>Т.о. образом IDataProcessor отвечает за отправку и получение данных. Появляется класс CNetworkDataProcessor, отправляющий данные по сети. CCompositeDataProcessor, отвечающий за вызов нескольких IDataProcessor по очереди. Появляется CCompressDataProcessor для сжатия и CEncryptDataProcessor для шифрования данных. Скорее всего тебе лучше использовать не сеть, а просто сохранение данных в файл.

Ну, какой в этом всем смысл? В дотнете уже есть StreamWriter и StringReader на базе которых элементарно реализуется пайплайн на обычных функциях. Доля ООП там есть, но реально раскрыть ООП таким примером будет сложно.

LD>Надеюсь,навел на интересные мысли


К сожалению, нет. За время общения с миром ФП мои воззрения несколько изменились и теперь я весьма скептически смотрю на применение ООП без особого на то основания. А тут же задача продемонстрировать сам ООП на примере. Хотелось бы чтобы пример не вызвал лишних вопросов, а демонстрировал бы преимущества ООП.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: FR  
Дата: 10.06.10 13:58
Оценка:
Здравствуйте, VladD2, Вы писали:


FR>>например решение задачи о восьми ферьзях в ООП


VD>Боюсь, что на этом примере можно продемонстрировать только то, что для логических задачах лучше использовать Пролог, а не ООП.


Это да
Но там эта задача рассматривается как задача имитационного моделирования, так что ООП вполне на месте оказывается.
Re[13]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.06.10 14:04
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>А чем вышеупомянутое реактивное программирование хуже ООП для симуляции вообще и игр в частности?


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

А так, да — реактивное программирование — это классический пример симуляции.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.06.10 14:05
Оценка:
Здравствуйте, frontsquat, Вы писали:

F>ООП к месту лишь в узком специализированном классе задач. Например, моделирование. Вряд ли это простой класс задач, подходящий для ваших целей. А в большинстве случаев ООП неуместно, криво, искусственно притянуто за уши. Поэтому лучше вообще не приводите пример с ООП.


Почти согласен, кроме оценки степени. Как раз на практике мест где ООП рулит море. Только практика она обычно далека от простоты и понятности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: На базе чего лучше всего продемонстрировать ООП?
От: dsorokin Россия  
Дата: 10.06.10 14:06
Оценка:
Здравствуйте, VladD2, Вы писали:

VD> А тут же задача продемонстрировать сам ООП на примере. Хотелось бы чтобы пример не вызвал лишних вопросов, а демонстрировал бы преимущества ООП.


Думаю, что можно стырить идею из какого-нибудь учебника по f# типа Expert f# или Programming f#, которые доступны в электронном виде. И чем не подходят всякие точки, окружности, прямоугольники? Ведь твоя задача продемонстрировать преимущества Немерле при использовании ООП, а не преимущества самого ООП, которые итак многим известны.
Re[4]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.06.10 14:08
Оценка:
Здравствуйте, FR, Вы писали:

FR>Это да

FR>Но там эта задача рассматривается как задача имитационного моделирования, так что ООП вполне на месте оказывается.

А ссылку можно?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: На базе чего лучше всего продемонстрировать ООП?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.06.10 14:19
Оценка:
Здравствуйте, dsorokin, Вы писали:

D>Думаю, что можно стырить идею из какого-нибудь учебника по f# типа Expert f# или Programming f#, которые доступны в электронном виде.


Возможно. Я их не читал. Предлагай...

D>И чем не подходят всякие точки, окружности, прямоугольники?


Явной бессмысленностью применения ООП для этого. И полному практическому не соответствию действительности.

D>Ведь твоя задача продемонстрировать преимущества Немерле при использовании ООП, а не преимущества самого ООП, которые итак многим известны.


Моя задача не вызвать у читателя ощущения, что ему снова дурят голову разными фибоначами и родословными шариков. Меня самого выворачивает от этого.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: На базе чего лучше всего продемонстрировать ООП?
От: FR  
Дата: 10.06.10 14:22
Оценка: 77 (3)
Здравствуйте, VladD2, Вы писали:


VD>А ссылку можно?


Книжка тут http://www.ozon.ru/context/detail/id/136821/
Ну и так как в бумажном виде она сейчас недоступна можно посмотреть электрическую версию например
тут http://webmate.net.ru/ebooks/book73.html
Re: На базе чего лучше всего продемонстрировать ООП?
От: ZevS Россия  
Дата: 10.06.10 14:37
Оценка:
Здравствуйте, VladD2, Вы писали:

Можно реализовать приложение для работы с результатами тестов. Тест содержит вопросы с вариантами ответов, некоторые из них правильные. Кроме этого есть критерии оценки прохождения теста и различные метрики, как то — общее количество вопросов в тесте, количество вопросов с правльными оценками, процент правильных ответов, наиболее трудные вопросы. Тесты могут быть иерархичными — получаем группировку метрик. Возможны метрики по студентам: кто ответил лучше всех, средний бал... Вопросы могут быть отмечеты тегами, получаем группировку метрик по тегам (тегам + студентам).

Соответственно можно предусмотреть:
  • получение входных данных из различных источников: XML, .csv, база данных,
  • вывод результатов в различных форматах
  • Re[2]: На базе чего лучше всего продемонстрировать ООП?
    От: WolfHound  
    Дата: 10.06.10 14:57
    Оценка:
    Здравствуйте, ZevS, Вы писали:

    ZS>Можно реализовать приложение для работы с результатами тестов. Тест содержит вопросы с вариантами ответов, некоторые из них правильные.

    Это решается в функциональном стиле гораздо лучше.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[3]: На базе чего лучше всего продемонстрировать ООП?
    От: ZevS Россия  
    Дата: 10.06.10 15:24
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    ZS>>Можно реализовать приложение для работы с результатами тестов. Тест содержит вопросы с вариантами ответов, некоторые из них правильные.

    WH>Это решается в функциональном стиле гораздо лучше.

    Возможно.
    Re[6]: На базе чего лучше всего продемонстрировать ООП?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 10.06.10 16:29
    Оценка:
    Здравствуйте, FR, Вы писали:

    FR>Книжка тут http://www.ozon.ru/context/detail/id/136821/

    FR>Ну и так как в бумажном виде она сейчас недоступна можно посмотреть электрическую версию например
    FR>тут http://webmate.net.ru/ebooks/book73.html

    Там ~300 страниц. Может подскажешь в каком разделе искать интересные примеры?
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[4]: На базе чего лучше всего продемонстрировать ООП?
    От: samius Япония http://sams-tricks.blogspot.com
    Дата: 10.06.10 16:34
    Оценка:
    Здравствуйте, dsorokin, Вы писали:

    D>Думаю, что можно стырить идею из какого-нибудь учебника по f# типа Expert f# или Programming f#, которые доступны в электронном виде.


    Там не ахти какие идеи ООП. Да и подается все под соусом, что читателю наверняка придется писать библиотеки для использования на C#, взаимодействовать с FCL, потому и показывают как готовить объекты.
    Re[7]: На базе чего лучше всего продемонстрировать ООП?
    От: FR  
    Дата: 10.06.10 17:02
    Оценка:
    Здравствуйте, VladD2, Вы писали:


    VD>Там ~300 страниц. Может подскажешь в каком разделе искать интересные примеры?


    Главы 5, 6 и 8 ну и в 19 уже сложный пример (IDE)
    Re[5]: На базе чего лучше всего продемонстрировать ООП?
    От: gandjustas Россия http://blog.gandjustas.ru/
    Дата: 10.06.10 17:18
    Оценка:
    Здравствуйте, samius, Вы писали:

    S>Здравствуйте, dsorokin, Вы писали:


    D>>Думаю, что можно стырить идею из какого-нибудь учебника по f# типа Expert f# или Programming f#, которые доступны в электронном виде.


    S>Там не ахти какие идеи ООП. Да и подается все под соусом, что читателю наверняка придется писать библиотеки для использования на C#, взаимодействовать с FCL, потому и показывают как готовить объекты.


    Кстати идея, почему бы не написать расширение 2010 студии?
    Re[6]: На базе чего лучше всего продемонстрировать ООП?
    От: samius Япония http://sams-tricks.blogspot.com
    Дата: 10.06.10 17:29
    Оценка: 7 (1)
    Здравствуйте, gandjustas, Вы писали:

    G>Кстати идея, почему бы не написать расширение 2010 студии?


    интеграцию Немерла со студией!
    Re[8]: На базе чего лучше всего продемонстрировать ООП?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 10.06.10 18:15
    Оценка: +1
    Здравствуйте, FR, Вы писали:

    FR>Здравствуйте, VladD2, Вы писали:



    VD>>Там ~300 страниц. Может подскажешь в каком разделе искать интересные примеры?


    FR>Главы 5, 6 и 8 ну и в 19 уже сложный пример (IDE)


    Кстати, мне очень понравилось первая глава этой книги где товарищ рассуждает о принципе Чёрча (об эквивалентнсоти языков по Тьюрингу) и рассуждения Сапира (лингвиста) из которых следует "язык программирования, на котором записывается решение задачи, напрямую влияет на ход мыслей программиста, заставляя его рассматривать задачу под определенным углом".

    Его вывод:

    Итак, как для компьютерных, так и для естественных языков справедливо: язык направляет мысли, но не предписывает их.

    Очень созвучен моим мыслям. Он отлично объясняет почему многие приводимые тут примеры выглядят хорошими для их авторов и не очень для меня и некоторых других читателей этой темы.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: На базе чего лучше всего продемонстрировать ООП?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 10.06.10 18:18
    Оценка:
    Здравствуйте, Ikemefula, Вы писали:

    VD>>>1. Простенькая электронная табличка. Плюс в том, что в ней можно использовать строчный калькулятор из предыдущих частей.

    WH>>Это плохой пример для ООП

    I>Это отличный пример, а вот игрушка это отстой.


    Брэк! И то, и то примеры. А отличные они или отстойные завист от моря деталей. Лично я пока не определился. Попробую оба варианта.

    Проблема в том, что если как должен выглядеть грид-ёксель я знаю, то игрушки для меня тема не раскрытая. Нужен хороший пример.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: На базе чего лучше всего продемонстрировать ООП?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 10.06.10 18:25
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Электронная таблица это функциональный язык.


    Не. Это язык (очень примитивный), GUI которое позволяет этот язык применять и небольшая инфрастуктура.

    Язык можно элементарно получить путем допиливания строчного калькулятора. Все что в нем нужно доделать — это добавить переменные, диапазоны и функции. Это не так сложно.

    WH> Так что тут ООП вообще никак и ни о чем.


    Ну, как же? Это о том, как в грид вводить данные, как их отображать и как их извлекать (записывать в файл).

    Отображение и ввод (пользовательский) — это весьма себе симуляционная задачка. Сам спред — объект наследуемый от базового класса — грида. Ему нужно будет поменять поведение, так чтобы он отображал одно (значения), а редактировал другое (формулы). Пока не знаю насколько удастся продемонстрировать переопределение методов и другие ОО-фичи. Но в целом может получиться.

    WH>А вот игрушка это симуляция игрового мира. Симуляция это единственная задача где ООП рулит.


    Согласен. Но и там симуляция интерфейса. Причем значительно более простая. А это может оказаться хорошо для примера. Хотя может и плохо, если не удастся впихнуть в пример основные фичи ООП-а.

    Что же касается игрушек, то тут есть одна проблема. Я их никогда не писал. Теоретически я конечно представляю как это все должно выглядеть, но практически я даже не знаю как оценить объем кода для некоторой игршки.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[10]: На базе чего лучше всего продемонстрировать ООП?
    От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
    Дата: 10.06.10 20:20
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    VD>Проблема в том, что если как должен выглядеть грид-ёксель я знаю, то игрушки для меня тема не раскрытая. Нужен хороший пример.


    Ну, давай тогда грид, желательно в виде компонента, шоб заюзать было очнь просто
    Re: На базе чего лучше всего продемонстрировать ООП?
    От: vdimas Россия  
    Дата: 10.06.10 21:48
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Пишу очередную (четвертую) часть Язык Nemerle.

    VD>Данная часть должна быть посвящена ООП-у.

    VD>К сожалению, в голову не приходит хороших идей для демонстрации ООП-а.


    ООП не очень хорошо демонстрировать на наследовании. Скорее подойдет некая модель, где будет 2 или больше интерактивно общающихся объекта. Суть ООП лучше всего видна во взаимодействующих объектах с инкапсулированным состоянием.
    Re[13]: На базе чего лучше всего продемонстрировать ООП?
    От: vdimas Россия  
    Дата: 10.06.10 22:00
    Оценка:
    Здравствуйте, Klapaucius, Вы писали:

    K>А чем вышеупомянутое реактивное программирование хуже ООП для симуляции вообще и игр в частности?


    В чистом виде неудобно для большого кол-ва задач. Как дополнительный механизм — неплохо дополняет ООП. Да и тривиально на ООП реализуется, вообще-то.
    Re[2]: Circle-ellipse problem
    От: andy1618 Россия  
    Дата: 11.06.10 03:16
    Оценка:
    Здравствуйте, Куть, Вы писали:

    К>Классический пример: векторный редактор — круги, прямоугольники, эллипсы. Переопределяется рисование, изменение масштаба, повороты и т.д. В базовом классе, например, перемещение.


    Круги, эллипсы говорите? Это же как раз классический парадокс о невозможности наследования (то же, кстати, касается и прямоугольника-квадрата):
    http://en.wikipedia.org/wiki/Circle-ellipse_problem


    Т.е. если уж и строить пример с фигурами, то надо эту проблему либо явно упомянуть, либо искусно обойти
    Re: На базе чего лучше всего продемонстрировать ООП?
    От: Lazy Cjow Rhrr Россия lj://_lcr_
    Дата: 11.06.10 06:21
    Оценка: 45 (1)
    VladD2,

    Есть широко известный в узких кругах пример машины для приготовления кофе:

    http://alistair.cockburn.us/Coffee+machine+design+problem,+part+1
    http://alistair.cockburn.us/Coffee+machine+design+problem,+part+2

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

    VD>Пример должен быть:

    VD>* Кратким. Я должен легко описать его в рамках одной статьи (10-15) страниц (по 5 тысяч знаков без учета пробелов).
    VD>* Он должен демонстрировать наследование, виртуальные методы, события. Хорошо бы, но не обязательно, чтобы он так же демонстрировал использование интерфейсов.
    VD>* Понятным.
    VD>* Не абстрактным и практичным. Меня самого всегда раздражало когда ООП подавали на совершенно не реалистичных примерах вроде построения иерархии животных или библиотеки графических примитивов (которые на практике никакого ООП не используют).

    Полученная в результате иерархия:
    class Recipe   // Knows its ingredients and quantities
    class Product  // Knows its price and recipe
    class CashBox         // Knows credit available. Handles money or direct debit.
    class ProductSelector // Knows products; Captures selection; Coordinates CashBox and Mixer.
    class Mixer           // Interprets recipes; Coordinates dispensers.
    
    class BlackCoffee subclass of Product 
    class WhiteCoffee subclass of Product 
    class BlackSugarCoffee subclass of Product 
    class WhiteSugarCoffee subclass of Product 
    class Bouillon subclass of Product 
    class Moccha subclass of Product

    На мой взгляд весьма компактна (если что, можно выкинуть лишние виды кофе), есть наследование, полиморфизм, контейнер полиморфных объектов, события, интерфейсы. Насчёт практичности — пример основан на нормальных конкретных вещах, который каждый человек хотя бы раз трогал и видел в реальной жизни.

    VD>* Возможно, но не обязательно, связан с примером строчного калькулятор.


    Никакой связи с примером строчного калькулятора.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1423>>
    quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
    Re[2]: На базе чего лучше всего продемонстрировать ООП?
    От: anton_t Россия  
    Дата: 11.06.10 06:35
    Оценка:
    Здравствуйте, Lazy Cjow Rhrr, Вы писали:

    LCR>VladD2,


    LCR>Полученная в результате иерархия:

    LCR>
    LCR>class Recipe   // Knows its ingredients and quantities
    LCR>class Product  // Knows its price and recipe
    LCR>class CashBox         // Knows credit available. Handles money or direct debit.
    LCR>class ProductSelector // Knows products; Captures selection; Coordinates CashBox and Mixer.
    LCR>class Mixer           // Interprets recipes; Coordinates dispensers.
    
    LCR>class BlackCoffee subclass of Product 
    LCR>class WhiteCoffee subclass of Product 
    LCR>class BlackSugarCoffee subclass of Product 
    LCR>class WhiteSugarCoffee subclass of Product 
    LCR>class Bouillon subclass of Product 
    LCR>class Moccha subclass of Product
    LCR>

    LCR>На мой взгляд весьма компактна (если что, можно выкинуть лишние виды кофе), есть наследование, полиморфизм, контейнер полиморфных объектов, события, интерфейсы. Насчёт практичности — пример основан на нормальных конкретных вещах, который каждый человек хотя бы раз трогал и видел в реальной жизни.

    Такая иерархия:

    class BlackCoffee subclass of Product 
    class WhiteCoffee subclass of Product 
    class BlackSugarCoffee subclass of Product 
    class WhiteSugarCoffee subclass of Product


    наводит на мысль, что нужно применить композицию, а не наследование.
    Re: На базе чего лучше всего продемонстрировать ООП?
    От: Klapaucius  
    Дата: 11.06.10 06:54
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Пишу очередную (четвертую) часть Язык Nemerle.

    VD>Данная часть должна быть посвящена ООП-у.
    VD>К сожалению, в голову не приходит хороших идей для демонстрации ООП-а.

    Тут неоднократно выражали точку зрения (по моему мнению — правильную), что в Немерле функциональная декомпозиция применяется "на уровне метода", а объектная декомпозиция "на более высоком уровне — для организации этих методов". Отсюда очевидная проблема: если демонстрировать ООП на базе небольшой простой задачи — эта демонстрация неизбежно окажется вмученной, а ООП там притянутым за уши. Ну, по той простой причине, что для решения "небольших задач" на Немерле ООП действительно не нужен. Читатель книги просто придет к выводу, что "ООП не нужен" — вот и все. Если такая цель и ставится, то самый простой способ ее достижения — решить ту же задачу с калькулятором средствами ООП и читатель отшатнется от ООП в ужасе. Если ставится противоположная задача, то и демонстрировать ООП нужно для решения проблем, для которых он в Немерле и предназначен: т.е. для организации более мелких задач, решенных с помощью ФП. В данном случае — строчного калькулятора. Поэтому электронная таблица в этом смыле кажется подходящим примером. Но с другой стороны, как верно было замечено, это не лучший для демонстрации ООП пример.
    Другой пример, не связанный с использованием калькулятора, также будет представлять из себя несколько подзадач, решенных в функциональном стиле и связанных с помощью ООП. Т.е. глава про ООП будет по большей части состоять из демонстрации средств ФП — насколько это будет правильно в методическом плане?
    Если это книга для обучения программированию, не лучше ли было бы рассматривать ООП в главе про высокоуровневую организацию программы — т.е. на решении тех задач, для которых оно в Немерле и предназначено, а не выдумывать какую-то вымученную проблему? Еще лучше — подвести по ходу книги читателя к проблемам дизайна "верхнего уровня", попытаться решить их средствами ФП, выделить возникшие сложности и после этого продемонстрировать ООП как средство их решения.
    В противном случае у читателя неизбежно возникнет впечатление, что ООП совершенно излишне в Немерле и его средства добавлены в язык ни для чего, без всякого смысла.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
    'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
    Re[2]: На базе чего лучше всего продемонстрировать ООП?
    От: gandjustas Россия http://blog.gandjustas.ru/
    Дата: 11.06.10 06:59
    Оценка:
    Здравствуйте, Lazy Cjow Rhrr, Вы писали:

    LCR>VladD2,


    LCR>Есть широко известный в узких кругах пример машины для приготовления кофе:


    LCR>http://alistair.cockburn.us/Coffee+machine+design+problem,+part+1

    LCR>http://alistair.cockburn.us/Coffee+machine+design+problem,+part+2

    Статья аж 1998 года, когда hype ООП был на пике. Надеюсь сейчас такого никто не напишет, в том числе в предстоящей статье по Nemerle.
    Re[3]: На базе чего лучше всего продемонстрировать ООП?
    От: Lazy Cjow Rhrr Россия lj://_lcr_
    Дата: 11.06.10 07:19
    Оценка:
    gandjustas,

    G>Статья аж 1998 года, когда hype ООП был на пике. Надеюсь сейчас такого никто не напишет, в том числе в предстоящей статье по Nemerle.


    Евклидова геометрия берёт своё начало почти 2500 лет назад, и ничего, мы все ей пользуемся. Так что претензия к дате не принимается. С чем ещё не согласен?
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1423>>
    quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
    Re[3]: На базе чего лучше всего продемонстрировать ООП?
    От: Lazy Cjow Rhrr Россия lj://_lcr_
    Дата: 11.06.10 07:19
    Оценка: +1
    anton_t,

    _>Такая иерархия:


    _>
    _>class BlackCoffee subclass of Product 
    _>class WhiteCoffee subclass of Product 
    _>class BlackSugarCoffee subclass of Product 
    _>class WhiteSugarCoffee subclass of Product
    _>


    _>наводит на мысль, что нужно применить композицию, а не наследование.


    Можно и то, и то. Можно вообще не применять наследование. И вообще, я не знаю примера, где применение наследования обязательно, конечно исключая те случаи, когда библиотечные классы навязывают такое их использование.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1423>>
    quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
    Re[4]: На базе чего лучше всего продемонстрировать ООП?
    От: gandjustas Россия http://blog.gandjustas.ru/
    Дата: 11.06.10 07:39
    Оценка:
    Здравствуйте, Lazy Cjow Rhrr, Вы писали:

    LCR>gandjustas,


    G>>Статья аж 1998 года, когда hype ООП был на пике. Надеюсь сейчас такого никто не напишет, в том числе в предстоящей статье по Nemerle.


    LCR>Евклидова геометрия берёт своё начало почти 2500 лет назад, и ничего, мы все ей пользуемся. Так что претензия к дате не принимается. С чем ещё не согласен?


    А причем тут возраст? В 1998 году было модно писать такой код, сейчас большинство разработчиков понимают что он не нужен.

    Иерархии без полиморфного поведения не нужны. Декомпозиция должна быть не на основе физических объектов, а на основе выполняемых действий.
    Re[5]: На базе чего лучше всего продемонстрировать ООП?
    От: Lazy Cjow Rhrr Россия lj://_lcr_
    Дата: 11.06.10 08:20
    Оценка:
    gandjustas,

    G>Иерархии без полиморфного поведения не нужны. Декомпозиция должна быть не на основе физических объектов, а на основе выполняемых действий.


    Тогда уж сразу — иерархии не нужны! Интерфейсы + реализация = и все щасливы (вкупе с mixin composition даже я). А пример я и не предлагал копипэстить — его можно и нужно адаптировать. Наделить Product каким нибудь поведением, скажем getPrice. Там ведь ещё бульон есть, ты заметил это?
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1423>>
    quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
    Re[2]: На базе чего лучше всего продемонстрировать ООП?
    От: lomeo Россия http://lomeo.livejournal.com/
    Дата: 11.06.10 09:15
    Оценка:
    Здравствуйте, vdimas, Вы писали:

    V>ООП не очень хорошо демонстрировать на наследовании. Скорее подойдет некая модель, где будет 2 или больше интерактивно общающихся объекта. Суть ООП лучше всего видна во взаимодействующих объектах с инкапсулированным состоянием.


    +1! Эрланг — самый правильный ОО язык.
    Re[2]: На базе чего лучше всего продемонстрировать ООП?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 11.06.10 13:00
    Оценка:
    Здравствуйте, vdimas, Вы писали:

    V>ООП не очень хорошо демонстрировать на наследовании. Скорее подойдет некая модель, где будет 2 или больше интерактивно общающихся объекта. Суть ООП лучше всего видна во взаимодействующих объектах с инкапсулированным состоянием.


    У меня нет задачи объяснить людям что такое ООП. Моя задача показать как фичи ООП можно использовать для написания реальной программы.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: На базе чего лучше всего продемонстрировать ООП?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 11.06.10 13:14
    Оценка:
    Здравствуйте, Lazy Cjow Rhrr, Вы писали:

    LCR>Полученная в результате иерархия:

    LCR>
    LCR>class Recipe   // Knows its ingredients and quantities
    LCR>class Product  // Knows its price and recipe
    LCR>class CashBox         // Knows credit available. Handles money or direct debit.
    LCR>class ProductSelector // Knows products; Captures selection; Coordinates CashBox and Mixer.
    LCR>class Mixer           // Interprets recipes; Coordinates dispensers.
    
    LCR>class BlackCoffee subclass of Product 
    LCR>class WhiteCoffee subclass of Product 
    LCR>class BlackSugarCoffee subclass of Product 
    LCR>class WhiteSugarCoffee subclass of Product 
    LCR>class Bouillon subclass of Product 
    LCR>class Moccha subclass of Product
    LCR>

    LCR>На мой взгляд весьма компактна (если что, можно выкинуть лишние виды кофе), есть наследование, полиморфизм, контейнер полиморфных объектов, события, интерфейсы. Насчёт практичности — пример основан на нормальных конкретных вещах, который каждый человек хотя бы раз трогал и видел в реальной жизни.

    Есть большое подозрение, что на вариантных типах (алгебраических типах) эту задачу будет намного удобнее описывать. Иерархия с одним родителем намекает на это.

    Но, все равно, спасибо за ссылку. Рассмотрю и этот вариант.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: На базе чего лучше всего продемонстрировать ООП?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 11.06.10 13:20
    Оценка:
    Здравствуйте, Klapaucius, Вы писали:

    K>...Если это книга для обучения программированию, не лучше ли было бы рассматривать ООП в главе про высокоуровневую организацию программы — т.е. на решении тех задач, для которых оно в Немерле и предназначено, а не выдумывать какую-то вымученную проблему? Еще лучше — подвести по ходу книги читателя к проблемам дизайна "верхнего уровня", попытаться решить их средствами ФП, выделить возникшие сложности и после этого продемонстрировать ООП как средство их решения.

    K>В противном случае у читателя неизбежно возникнет впечатление, что ООП совершенно излишне в Немерле и его средства добавлены в язык ни для чего, без всякого смысла.

    Мысли правильные, но к сожалению действительно сложную задачу в обучающих целях использовать нельзя. Люди просто запутаются.

    В принципе электронная таблица будет как раз довольно большим примером, так что на ее базе наверно удастся продемонстрировать и аспект структуризации программы. Надо будет подумать.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: На базе чего лучше всего продемонстрировать ООП?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 11.06.10 14:08
    Оценка:
    Здравствуйте, lomeo, Вы писали:

    L>+1! Эрланг — самый правильный ОО язык.


    Дык медленный очень.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re: На базе самого Немерле.
    От: c-smile Канада http://terrainformatica.com
    Дата: 11.06.10 16:11
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    На базе самого Немерле. А именно его компилятора.
    Скажем AST это дерево структур типа Unary/BinaryExpression ну и т.д.

    И людям полезно будет въехать в конструкцию AST ибо Nemerle как я понимаю
    позволяет работать с ним.
    Re[2]: На базе самого Немерле.
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 11.06.10 16:30
    Оценка:
    Здравствуйте, c-smile, Вы писали:

    CS>На базе самого Немерле. А именно его компилятора.

    CS>Скажем AST это дерево структур типа Unary/BinaryExpression ну и т.д.

    Это явно перебор для новичков.

    CS>И людям полезно будет въехать в конструкцию AST ибо Nemerle как я понимаю

    CS>позволяет работать с ним.

    AST немерла сделано на базе вариантных типов. А они относятся к ФП, а не к ООП. Так что тоже несколько не то.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: На базе самого Немерле.
    От: Sinix  
    Дата: 11.06.10 17:36
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, c-smile, Вы писали:


    Ххо! 11 страниц, и еще не определились?

    Всё перечитывать лень, свои 5 копеек (могут быть повторы):

    1) Иллюстрировать ООП с помощью примеров из реальной предметной области не стоит (те самые "классические" Vehicle, VehicleEngine, CarriageVehicle и HorseVehicleЕсли стоит Engine). Там поднимается слишком много вопросов — от правильного отображения модели данных на классы до anemic vs rich. Даже в БЛ довольно редко возникает необходимость в наследовании. Не, придумать-то можно, но будет выглядеть тяжеловесно и неестественно.

    2) Сценарии, когда проявляется вся моща ООП, довольно редки — как правило, сценарии относятся скорее к компонентному программированию. Обычно в пример приводят:
    2.1) всякие rule/flow/token-based engine;
    2.2) общие абстракции наподобие потоков или коллекций;
    2.3) правильная реализация своего типа данных — правда, к ООП там тможно отнести только переопределение Equals/GetHashCode.

    3) Если стоит цель — показать практическое применение ООП, то и сосредоточиться стоит в первую очередь на прикладных примерах с наследованием от уже существующих компонент. Выбрать часть фреймворка, знакомую большей части ЦА (BCL, WinForms, ASP.NET) — примеров найдётся ого-го.
    Re[4]: На базе самого Немерле.
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 11.06.10 17:58
    Оценка:
    Здравствуйте, Sinix, Вы писали:

    S>3) Если стоит цель — показать практическое применение ООП,


    Ага. Именно эта цель и стоит.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: На базе чего лучше всего продемонстрировать ООП?
    От: vdimas Россия  
    Дата: 11.06.10 21:04
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>У меня нет задачи объяснить людям что такое ООП. Моя задача показать как фичи ООП можно использовать для написания реальной программы.


    Ну, если аудитория уже подготовлена, можно показать помощь Немерла по автоматической генерации нудных компонентных артефактов под дотнет, например для биндинга:
    public int SomeProp {
       get{}
    
       set {
       ...
          if(_value!=value) {
             ...
             var args = new SomeEventArgs(value);
             if(OnSomePropChanging(args))
                OnSomePropChanged(args);
          }
      }
    } 
    
    public event SomeCancelEventHandler SomePropChanging;
    public event SomeEventHandler SomePropChanged;
    
    protected virtual bool OnSomePropChanging(...) {
       var callback = SomePropChanging;
       if(callback!=null) {
          bool cancel =  false;
          callback(.., ref cancel);
          return cancel;
       }
       return true;
    }
    protected virtual void OnSomePropChanged(...) {...}


    Всю эту нудь можно расписать парой строк, насколько я понял.

    Или аналогичный биндинг, но под WPF.

    И сравнить исходники на N и на C#.
    Re[4]: На базе чего лучше всего продемонстрировать ООП?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 11.06.10 21:24
    Оценка:
    Здравствуйте, vdimas, Вы писали:

    VD>>У меня нет задачи объяснить людям что такое ООП. Моя задача показать как фичи ООП можно использовать для написания реальной программы.


    V>Ну, если аудитория уже подготовлена, можно показать помощь Немерла по автоматической генерации нудных компонентных артефактов под дотнет, например для биндинга:...


    Задача показать как создавать ОО-код на базе некоторого примера.

    Что касается подготовки, то опять же нельзя отсекать огромную часть аудитории предявляя к ней какие-то лишние требования.

    Твое предложение — это предложение продемонстрировать мощь макросов применительно к проблемам имеющимся в шаре. Если это интересно, то можно взглянуть в снипеты и в стандартную библиотеку макросов. Например, вот здесь демонстрируется как "бороться" с зависимыми свойствами WPF:
    * Пример использования макосов.
    * Сами макросы.

    Но это не то что нужно в данном разделе.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: На базе чего лучше всего продемонстрировать ООП?
    От: andy1618 Россия  
    Дата: 12.06.10 05:32
    Оценка: +1
    Здравствуйте, VladD2, Вы писали:

    VD>... и рассуждения Сапира (лингвиста) из которых следует "язык программирования, на котором записывается решение задачи, напрямую влияет на ход мыслей программиста, заставляя его рассматривать задачу под определенным углом".


    Кстати, да, уже давно задумывался о том, что гипотеза Сепира-Уорфа на все 100% применима и к языкам программирования.
    Только речь идёт, скорее, не о "языке, на котором НАДО записать решение", а о "языке/языках, на которых программист ПРИВЫК программировать".
    Re[11]: На базе чего лучше всего продемонстрировать ООП?
    От: BulatZiganshin  
    Дата: 12.06.10 09:31
    Оценка:
    Здравствуйте, Andrei N.Sobchuck, Вы писали:

    WH>>Электронная таблица это функциональный язык. Так что тут ООП вообще никак и ни о чем.


    ANS>Плохому танцору... того...

    ANS>Как бы, с борландами, и с C++ и с ObjectPascal ходил Calc, если мне склероз не изменяет. С мордой на TurboVision. Как я помню исходники были маленькими.

    хуже того — они поставлялись в качестве примера ещё с tp 3.0. задолго до ООП
    Люди, я люблю вас! Будьте бдительны!!!
    Re[10]: На базе чего лучше всего продемонстрировать ООП?
    От: _FRED_ Черногория
    Дата: 12.06.10 10:49
    Оценка: -1
    Здравствуйте, Ikemefula, Вы писали:

    I>>>Хорошо бы увидеть в этой проге хорошую аутомейшн модел, что бы можно было в рантаме запускать всякую всячину прямо на немерле и таким образм тренироваться


    VD>>Сдается мне, что это все равно как в качестве задач по механике приводить устройство современного танка.


    I> У дядьки вот здесь очень неплохо вышло


    About the author

    Omar AL Zabir is a student of…

    Help will always be given at Hogwarts to those who ask for it.
    Re[4]: На базе чего лучше всего продемонстрировать ООП?
    От: _FRED_ Черногория
    Дата: 12.06.10 10:58
    Оценка:
    Здравствуйте, dsorokin, Вы писали:

    VD>> А тут же задача продемонстрировать сам ООП на примере. Хотелось бы чтобы пример не вызвал лишних вопросов, а демонстрировал бы преимущества ООП.


    D>Думаю, что можно стырить идею из какого-нибудь учебника по f# типа Expert f# или Programming f#, которые доступны в электронном виде. И чем не подходят всякие точки, окружности, прямоугольники? Ведь твоя задача продемонстрировать преимущества Немерле при использовании ООП, а не преимущества самого ООП, которые итак многим известны.


    Читали? В Programming F# говорится не столько про ООП, сколько про ООП в дотнете: методы Систем.Обджект, Эквалити и прочее. В каждом разделе — просто про то, что есть такие вот, например, виртуальные методы, которые можно перегружать и приводится синтаксис данной ООП фтуки. Никакого примера, в котором бы описывались преимущества ООП, а не просто то, как его записать, там нет.
    Help will always be given at Hogwarts to those who ask for it.
    Re[11]: На базе чего лучше всего продемонстрировать ООП?
    От: Lazy Cjow Rhrr Россия lj://_lcr_
    Дата: 12.06.10 11:19
    Оценка:
    _FRED_,

    I>> У дядьки вот здесь


    _FR>

    _FR>Omar AL Zabir is a student of…




    Кто скажет что это девочка пусть первым бросит в меня камень.

    ... << RSDN@Home 1.2.0 alpha 4 rev. 1423>>
    quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
    Re[7]: На базе чего лучше всего продемонстрировать ООП?
    От: Ziaw Россия  
    Дата: 12.06.10 16:10
    Оценка:
    Здравствуйте, samius, Вы писали:

    S>Здравствуйте, gandjustas, Вы писали:


    G>>Кстати идея, почему бы не написать расширение 2010 студии?


    S>интеграцию Немерла со студией!


    Можно сделать простенькую интеграцию для калькулятора. Т.е. вводим ввыражение в файл, там работает хайлайтинг и показываются хинты. Только статья получится — как прикрутить свой язык к студии. Статья довольно злободневная, но как-то в стороне от темы.
    Re[11]: На базе чего лучше всего продемонстрировать ООП?
    От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
    Дата: 12.06.10 18:42
    Оценка:
    Здравствуйте, _FRED_, Вы писали:

    _FR>

    _FR>About the author

    _FR>Omar AL Zabir is a student of…




    а если прочесть чуть больше


    He developed the Web-based automation and collaboration system for his university using the .NET Framework almost three years ago when it was in the Beta 1 stage. He has also worked for seven years (beginning when he was in high school) at Orion Technologies as Lead Developer, developing solutions for large banks in the United States. His love for Microsoft technologies can be seen at his Web site www.oazabir.com.


    хороший студент — 7 лет опыт лиддевелопера.
    Re[12]: На базе чего лучше всего продемонстрировать ООП?
    От: _FRED_ Черногория
    Дата: 12.06.10 21:21
    Оценка:
    Здравствуйте, Ikemefula, Вы писали:

    _FR>>

    _FR>>About the author
    _FR>>Omar AL Zabir is a student of…

    I>

    I>а если прочесть чуть больше

    I>He developed the Web-based automation and collaboration system for his university using the .NET Framework almost three years ago when it was in the Beta 1 stage. He has also worked for seven years (beginning when he was in high school) at Orion Technologies as Lead Developer, developing solutions for large banks in the United States. His love for Microsoft technologies can be seen at his Web site www.oazabir.com.


    I>хороший студент — 7 лет опыт лиддевелопера.


    В том что касается опыта, на мой более чем скромный взгляд, дела говорят более биографии.

    Прежде чем написать свой пост, я нашёл анкету данного товарища на линкедине, поэтому имел представление о его "послужном списке". Так вот в том, что касается данной статьи, отквоченное мной более отражает действительность, нежели те, где "чуть больше".
    Help will always be given at Hogwarts to those who ask for it.
    Re[13]: На базе чего лучше всего продемонстрировать ООП?
    От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
    Дата: 13.06.10 06:03
    Оценка: :)
    Здравствуйте, _FRED_, Вы писали:

    I>>хороший студент — 7 лет опыт лиддевелопера.


    _FR>В том что касается опыта, на мой более чем скромный взгляд, дела говорят более биографии.


    Что тебе в его программе не понравилось ?

    Плохая модель, корявый код, вагон ошибок ?

    _FR>Прежде чем написать свой пост, я нашёл анкету данного товарища на линкедине, поэтому имел представление о его "послужном списке".


    http://bd.linkedin.com/in/oazabir

    Что именно тебя смутило в его послужном списке ?

    >Так вот в том, что касается данной статьи, отквоченное мной более отражает действительность, нежели те, где "чуть больше".


    Нюню

    Omar AL Zabir’s Honors:
    Microsoft Most Valuable Professional — Visual C# — 2005, 2006, 2007, 2008, 2009, 2010
    Re: На базе чего лучше всего продемонстрировать ООП?
    От: Тролль зеленый и толстый  
    Дата: 14.06.10 16:25
    Оценка:
    1) Иерархия контейнеров — абстрактное множество, перечисляемое множество, список, массив, ассоциативный словарь и т.д.
    2) Опять же, UI — базовый класс Control, производный Panel, производный List и т.д.

    <полемика>
    А вообще, мне кажется, проблема не в подборе примера, а в тебе самом. Похоже, ты просто считаешь ООП ненужным (или не понимаешь как его применять?) Да и, на самом деле — языки со смешанной парадигмой вообще вещь сомнительная. В этой необходимости переключения между враждебными подходами есть какая-то концептуальная неполноценность. Здесь у нас — ФП, здесь — ООП, а здесь — селедку заворачивали.
    </полемика>
    Re[14]: На базе чего лучше всего продемонстрировать ООП?
    От: Klapaucius  
    Дата: 15.06.10 06:51
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Хотябы тем что отсутствуют связи межу объектами.

    Извините, не понял.

    WH>Попробуй представить реализацию проверки попдания пули по монстру используя реактивное программирование.

    А как это будет выглядеть в ОО?
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
    'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
    Re[14]: На базе чего лучше всего продемонстрировать ООП?
    От: Klapaucius  
    Дата: 15.06.10 06:51
    Оценка:
    Здравствуйте, vdimas, Вы писали:

    V>В чистом виде неудобно для большого кол-ва задач.

    Ну, я, собственно, и спросил — чем не удобно? Ответ "тем что неудобно" мне кажется каким-то малосодержательным.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
    'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
    Re[12]: На базе чего лучше всего продемонстрировать ООП?
    От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
    Дата: 15.06.10 07:54
    Оценка:
    Здравствуйте, BulatZiganshin, Вы писали:

    ANS>>Плохому танцору... того...

    ANS>>Как бы, с борландами, и с C++ и с ObjectPascal ходил Calc, если мне склероз не изменяет. С мордой на TurboVision. Как я помню исходники были маленькими.

    BZ>хуже того — они поставлялись в качестве примера ещё с tp 3.0. задолго до ООП


    TurboVision — это ООП.
    Re[15]: На базе чего лучше всего продемонстрировать ООП?
    От: WolfHound  
    Дата: 15.06.10 08:46
    Оценка:
    Здравствуйте, Klapaucius, Вы писали:

    WH>>Хотябы тем что отсутствуют связи межу объектами.

    K>Извините, не понял.

    Reactive programming is a programming paradigm oriented around data flows and the propagation of change. This means that it should be possible to express static or dynamic data flows with ease in the programming languages used, and that the underlying execution model will automatically propagate changes through the data flow.

    (С) http://en.wikipedia.org/wiki/Reactive_programming

    Найти куда воткнуть эти самые "data flows" между объектами симуляции весьма затруднительно.
    А даже если и получится то получишь дикий перерасход памяти и вычислительных ресурсов.
    Да и решение получится сложнее чем на ООП.

    WH>>Попробуй представить реализацию проверки попдания пули по монстру используя реактивное программирование.

    K>А как это будет выглядеть в ОО?
    monsters
        .FindNearMonsters(bullet) // отсекаем большую часть живности используя что-то типа quadmap.
        .FlatMap(monster => // Находим всех монстров в которых попадает эта пуля
            do
            {
                dist <- monster.Collide(bullet); // Collide возвращает option (он же maby)
                return (dist, monster);
            })
        .FindBest(((oldDist, _), (newDist, _)) => newDist < oldDist) // Выбераем первого

    Даже если забыть про FindNearMonsters который экономит кучу времени выбор первого монстра для убивания выносит мозг на корню. Как это сделать используя реактивное программирование я не знаю.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re: На базе чего лучше всего продемонстрировать ООП?
    От: z00n  
    Дата: 15.06.10 08:51
    Оценка:
    Использовать пример из 10-ой главы "Programming in Scala" by Odersky et al.

    Код:
    http://booksites.artima.com/programming_in_scala/examples/html/ch10.html
    Re[16]: На базе чего лучше всего продемонстрировать ООП?
    От: Klapaucius  
    Дата: 15.06.10 09:51
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>
    WH>monsters
    WH>    .FindNearMonsters(bullet) // отсекаем большую часть живности используя что-то типа quadmap.
    WH>    .FlatMap(monster => // Находим всех монстров в которых попадает эта пуля
    WH>        do
    WH>        {
    WH>            dist <- monster.Collide(bullet); // Collide возвращает option (он же maby)
    WH>            return (dist, monster);
    WH>        })
    WH>    .FindBest(((oldDist, _), (newDist, _)) => newDist < oldDist) // Выбераем первого
    WH>

    WH>Даже если забыть про FindNearMonsters который экономит кучу времени выбор первого монстра для убивания выносит мозг на корню. Как это сделать используя реактивное программирование я не знаю.

    Подождите, тут же как раз dataflow:
    Есть поток монстров. Он проходит через фильтр. Потом поток раздваивается, одна часть проходит через преобразователь и фильтр, вторая остается неизменной. Потом два получившихся потока перемножаются. А потом результирующий поток сворачивается в скаляр.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
    'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
    Re[17]: На базе чего лучше всего продемонстрировать ООП?
    От: WolfHound  
    Дата: 15.06.10 10:04
    Оценка:
    Здравствуйте, Klapaucius, Вы писали:

    K>Подождите, тут же как раз dataflow:

    K>Есть поток монстров. Он проходит через фильтр. Потом поток раздваивается, одна часть проходит через преобразователь и фильтр, вторая остается неизменной. Потом два получившихся потока перемножаются. А потом результирующий поток сворачивается в скаляр.

    Reactive programming is a programming paradigm oriented around data flows and the propagation of change.

    Где тут "propagation of change"?

    Вот для сравнения пример реактивного программирования
    http://www.impredicative.com/ur/more/dragList.html
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[18]: На базе чего лучше всего продемонстрировать ООП?
    От: Klapaucius  
    Дата: 15.06.10 10:38
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Где тут "propagation of change"?


    Ну, так предложеный код — это ведь простой запрос без всякого изменения состояния. Поэтому и продвижения состояния нет — оно просто не нужно — одни только потоки данных.
    Но, в любом случае, это никак не соотвествует моему представлению об ООП.
    В ООП был бы объект — коллекция объектов и диспетчеризатор сообщений. У него бы вызывался метод Shoot(bullet), а он бы потом вызывал виртуальный метод Shoot(bullet), при этом объект-монстр при попадании в него этой переданной ему пули вызывал бы одни методы, а при промахе другие. Что-то вроде того.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
    'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
    Re[19]: На базе чего лучше всего продемонстрировать ООП?
    От: Klapaucius  
    Дата: 15.06.10 10:40
    Оценка:
    >а он бы потом вызывал виртуальный метод Shoot(bullet), при этом объект-монстр при попадании...

    Тут конечно "а он бы потом вызывал виртуальный метод Shoot(bullet) у все принадлежащих ему объектов, при этом..."
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
    'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
    Re[19]: На базе чего лучше всего продемонстрировать ООП?
    От: WolfHound  
    Дата: 15.06.10 11:36
    Оценка:
    Здравствуйте, Klapaucius, Вы писали:

    K>Ну, так предложеный код — это ведь простой запрос без всякого изменения состояния. Поэтому и продвижения состояния нет — оно просто не нужно — одни только потоки данных.

    Мне что всю игру написать?
    foreach (bullet in bullets)
    {
        do
        {
            (_, monster) <- monsters
                .FindNearMonsters(bullet) // отсекаем большую часть живности используя что-то типа quadmap.
                .FlatMap(monster => // Находим всех монстров в которых попадает эта пуля
                        do
                        {
                                dist <- monster.Collide(bullet); // Collide возвращает option (он же maby)
                                return (dist, monster);
                        })
                .FindBest(((oldDist, _), (newDist, _)) => newDist < oldDist); // Выбераем первого
            def isDead = monster.Hit(bullet); // вот тебе изменение состояния.
            when (isDead)
                monsters.Remove(monster); // вот второе. Убираем мертвых монстров из коллекции.
        }
    }


    K>Но, в любом случае, это никак не соотвествует моему представлению об ООП.

    K>В ООП был бы объект — коллекция объектов и диспетчеризатор сообщений.
    ФВП ООПу не помеха.
    Следи за руками:
    Посылаем объеку monsters сообщение FindNearMonsters с параметром bullet.
    Получаем объект который содержит монстров находящихся близко от пули.
    Посылаем только что полученному объекту сообщение FlatMap с замыканием.
    Замыкание тоже объект которому мы посылаем сообщение Appaly с параметром monster...

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

    K>У него бы вызывался метод Shoot(bullet), а он бы потом вызывал виртуальный метод Shoot(bullet), при этом объект-монстр при попадании в него этой переданной ему пули вызывал бы одни методы, а при промахе другие. Что-то вроде того.

    Пуля может попасть в несколько. А нам нужен только ближайший.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[13]: На базе чего лучше всего продемонстрировать ООП?
    От: BulatZiganshin  
    Дата: 15.06.10 11:55
    Оценка:
    Здравствуйте, Ikemefula, Вы писали:

    ANS>>>Как бы, с борландами, и с C++ и с ObjectPascal ходил Calc, если мне склероз не изменяет. С мордой на TurboVision. Как я помню исходники были маленькими.


    BZ>>хуже того — они поставлялись в качестве примера ещё с tp 3.0. задолго до ООП


    I>TurboVision — это ООП.


    а тогда calc был написан на старой консольной библиотеке, с помощью gotoxy
    Люди, я люблю вас! Будьте бдительны!!!
    Re[20]: На базе чего лучше всего продемонстрировать ООП?
    От: Klapaucius  
    Дата: 15.06.10 12:19
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    WH>Мне что всю игру написать?


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

    WH>ФВП ООПу не помеха.

    WH>Следи за руками:

    Ну да, в принципе можно для (почти?) любого кода расписать и ООП и ФП семантику. Т.е. "объектность" она бывает в голове и в деталях реализации, но никак не в коде.

    WH>Пуля может попасть в несколько. А нам нужен только ближайший.


    Это-то понятно. Имелось в виду, что они сообщением заявляют о себе, как о находящихся на линии выстрела. Ну а дальше их заявки рассматриваются и победителю высылается сообщение-смертный приговор.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
    'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
    Re[15]: На базе чего лучше всего продемонстрировать ООП?
    От: vdimas Россия  
    Дата: 16.06.10 01:44
    Оценка:
    Здравствуйте, Klapaucius, Вы писали:


    V>>В чистом виде неудобно для большого кол-ва задач.

    K>Ну, я, собственно, и спросил — чем не удобно? Ответ "тем что неудобно" мне кажется каким-то малосодержательным.

    Основное неудобство — это плохоконтроллируемые потоки вычислений при их кол-ве чуть большем, чем на пару экранов + высокая вероятность гонок.
    Без полноценного графического инструмента, типа как редактора схем электрических функциональных, решать на этой технологии даже задачи среднего уровня — утопия. Хотя, вполне можно использовать и без спец.инструментов в изолированном пространстве как способ "красиво" имеплементить какие-нить событийные мелочи.
    Re[14]: На базе чего лучше всего продемонстрировать ООП?
    От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
    Дата: 16.06.10 05:31
    Оценка:
    Здравствуйте, BulatZiganshin, Вы писали:

    BZ>Здравствуйте, Ikemefula, Вы писали:


    ANS>>>>Как бы, с борландами, и с C++ и с ObjectPascal ходил Calc, если мне склероз не изменяет. С мордой на TurboVision. Как я помню исходники были маленькими.


    BZ>>>хуже того — они поставлялись в качестве примера ещё с tp 3.0. задолго до ООП


    I>>TurboVision — это ООП.


    BZ>а тогда calc был написан на старой консольной библиотеке, с помощью gotoxy


    Был, а был еще и тот, что с мордой на ТурбоВижн, про него и речь.
    Re[15]: На базе чего лучше всего продемонстрировать ООП?
    От: BulatZiganshin  
    Дата: 16.06.10 05:56
    Оценка: +1
    Здравствуйте, Ikemefula, Вы писали:

    I>Был, а был еще и тот, что с мордой на ТурбоВижн, про него и речь.


    речь вообще-то о том, что для написания calc не обязателен ни ФП, ни ООП
    Люди, я люблю вас! Будьте бдительны!!!
    Re[16]: На базе чего лучше всего продемонстрировать ООП?
    От: Klapaucius  
    Дата: 16.06.10 10:48
    Оценка:
    Здравствуйте, vdimas, Вы писали:

    V>Основное неудобство — это плохоконтроллируемые потоки вычислений при их кол-ве чуть большем, чем на пару экранов


    А чем описание dataflow на несколько экранов менее удобно, чем ООП код на несколько экранов?

    V>Без полноценного графического инструмента, типа как редактора схем электрических функциональных, решать на этой технологии даже задачи среднего уровня — утопия.


    Ну, если так нужен графический инструмент — это проблема чисто техническая. Визуализировать dataflow даже легче.
    Кроме того, электрические схемы ведь тоже сейчас на языках программирования описывают, разве нет?
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
    'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
    Re[16]: На базе чего лучше всего продемонстрировать ООП?
    От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
    Дата: 16.06.10 17:11
    Оценка:
    Здравствуйте, BulatZiganshin, Вы писали:

    I>>Был, а был еще и тот, что с мордой на ТурбоВижн, про него и речь.


    BZ>речь вообще-то о том, что для написания calc не обязателен ни ФП, ни ООП


    Любая парадигма никогда не бывает обязательной.
    Re[17]: На базе чего лучше всего продемонстрировать ООП?
    От: BulatZiganshin  
    Дата: 16.06.10 17:24
    Оценка:
    Здравствуйте, Ikemefula, Вы писали:
    I>>>Был, а был еще и тот, что с мордой на ТурбоВижн, про него и речь.

    BZ>>речь вообще-то о том, что для написания calc не обязателен ни ФП, ни ООП


    I>Любая парадигма никогда не бывает обязательной.


    разумеется, языки-то тьюринг-полные. вот тебе захотелось доказать что calc можно сделать и на ООП, а я походя заметил что этот пример был у них ещё лет за 5 до tp 5.5
    Люди, я люблю вас! Будьте бдительны!!!
    Re[18]: На базе чего лучше всего продемонстрировать ООП?
    От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
    Дата: 16.06.10 17:48
    Оценка:
    Здравствуйте, BulatZiganshin, Вы писали:

    BZ>Здравствуйте, Ikemefula, Вы писали:

    I>>>>Был, а был еще и тот, что с мордой на ТурбоВижн, про него и речь.

    BZ>>>речь вообще-то о том, что для написания calc не обязателен ни ФП, ни ООП


    I>>Любая парадигма никогда не бывает обязательной.


    BZ>разумеется, языки-то тьюринг-полные. вот тебе захотелось доказать что calc можно сделать и на ООП,


    цитирую, что было

    ANS>Как бы, с борландами, и с C++ и с ObjectPascal ходил Calc, если мне склероз не изменяет. С мордой на TurboVision.


    >а я походя заметил что этот пример был у них ещё лет за 5 до tp 5.5


    какие другие примеры были до TurboVision(в 6.0 а не 5.5 кстати) это уже дело десятое.
    Калькулятор на TurboVision был очень неплох с т.з. демонстрации ООП.
    Re[19]: На базе чего лучше всего продемонстрировать ООП?
    От: BulatZiganshin  
    Дата: 16.06.10 18:05
    Оценка:
    Здравствуйте, Ikemefula, Вы писали:

    ANS>>Как бы, с борландами, и с C++ и с ObjectPascal ходил Calc, если мне склероз не изменяет. С мордой на TurboVision.


    I>какие другие примеры были до TurboVision(в 6.0 а не 5.5 кстати) это уже дело десятое.


    ну просто Владу нужен был пример, демонстрирующий преимущества ООП. а тут выясняется что оно и до ООП было в комплекте поставки, а тут его просто взяли и переписали на TV

    кстати, turbo pascal with objects и object pascal — разные языки
    Люди, я люблю вас! Будьте бдительны!!!
    Re: На базе чего лучше всего продемонстрировать ООП?
    От: igna Россия  
    Дата: 19.06.10 09:29
    Оценка: :))
    Здравствуйте, VladD2, Вы писали:

    VD>К сожалению, в голову не приходит хороших идей для демонстрации ООП-а.


    Вот так-то. Смотри сюда
    Автор: VladD2
    Дата: 21.03.08
    .
    Re[4]: На базе чего лучше всего продемонстрировать ООП?
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 24.06.10 14:42
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Дык не повторять же реализацию ВинФормсов только для того чтобы продемонстрировать ООП? Хотя это было бы как раз весьма неплохим примером.


    Винформсы это очень гадкий ООП.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[3]: На базе чего лучше всего продемонстрировать ООП?
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 24.06.10 14:42
    Оценка:
    Здравствуйте, WolfHound, Вы писали:

    ZS>>Можно реализовать приложение для работы с результатами тестов. Тест содержит вопросы с вариантами ответов, некоторые из них правильные.

    WH>Это решается в функциональном стиле гораздо лучше.

    UI, да еще с длинным стейтом в функциональном стиле — лучше?
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[5]: На базе чего лучше всего продемонстрировать ООП?
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 24.06.10 15:10
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    VD>>Дык не повторять же реализацию ВинФормсов только для того чтобы продемонстрировать ООП? Хотя это было бы как раз весьма неплохим примером.


    AVK>Винформсы это очень гадкий ООП.


    Но хоть какой-то. Лучше предложи альтернативу.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[6]: На базе чего лучше всего продемонстрировать ООП?
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 24.06.10 15:12
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Но хоть какой-то. Лучше предложи альтернативу.


    Сапер
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[7]: На базе чего лучше всего продемонстрировать ООП?
    От: Воронков Василий Россия  
    Дата: 24.06.10 20:58
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    VD>>Но хоть какой-то. Лучше предложи альтернативу.

    AVK>Сапер

    На винформах
    Re[8]: На базе чего лучше всего продемонстрировать ООП?
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 25.06.10 10:42
    Оценка:
    Здравствуйте, Воронков Василий, Вы писали:

    ВВ>На винформах


    Пофик. Хоть в консоли.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[10]: На базе чего лучше всего продемонстрировать ООП?
    От: LaPerouse  
    Дата: 25.06.10 12:33
    Оценка: -2 :))
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Ikemefula, Вы писали:


    VD>>>>1. Простенькая электронная табличка. Плюс в том, что в ней можно использовать строчный калькулятор из предыдущих частей.

    WH>>>Это плохой пример для ООП
    I>>Это отличный пример, а вот игрушка это отстой.
    WH>Электронная таблица это функциональный язык. Так что тут ООП вообще никак и ни о чем.

    Электронная таблица — это объект. Со своими свойствами и поведением.

    WH>А вот игрушка это симуляция игрового мира. Симуляция это единственная задача где ООП рулит.


    ООП рулит для всех задач, где нужно программировать. Потому что это не просто парадигма программирования, это способ построения архитектуры системы. Если ты считаешь, что для какой-то задачи ООП не подходит, значит ты не умеешь его использовать.
    Социализм — это власть трудящихся и централизованная плановая экономика.
    Re[9]: На базе чего лучше всего продемонстрировать ООП?
    От: Воронков Василий Россия  
    Дата: 25.06.10 12:43
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    ВВ>>На винформах

    AVK>Пофик. Хоть в консоли.

    Что-то мне кажется, что сапер в плане ООП будет очень сильно похож на простенький спред а ля Эксель, плюс которого еще и в том, что можно использовать разработанный ранее калькулятор. По сути тот же грид с разными типами ячеек. Где я не прав?
    Re[11]: На базе чего лучше всего продемонстрировать ООП?
    От: WolfHound  
    Дата: 25.06.10 12:45
    Оценка:
    Здравствуйте, LaPerouse, Вы писали:

    LP>ООП рулит для всех задач, где нужно программировать. Потому что это не просто парадигма программирования, это способ построения архитектуры системы. Если ты считаешь, что для какой-то задачи ООП не подходит, значит ты не умеешь его использовать.

    http://rsdn.ru/article/nemerle/Amplifier.xml#EJNAE
    Автор(ы): Чистяков Влад (VladD2)
    Дата: 03.03.2007
    Язык программирования Nemerle заинтересовал многих в первую очередь своей мощнейшей подсистемой мак-росов. Однако и без них Nemerle предоставляет ряд су-щественных улучшений по сравнению с традиционными, императивными языками программирования (такими как Java, C# и C++).
    Nemerle, кроме традиционного императивного програм-мирования, поддерживает функциональное программи-рование. Это выражается в наличии конструкций, упро-щающих манипуляцию функциями, построение и анализ сложных структур данных и т.п.
    К сожалению, если вы не использовали возможности, присущие функциональным языкам ранее, то вам будет трудно оценить, насколько Nemerle может оказаться вам полезным в реальной повседневной работе. Данная статья призвана в неформальной форме продемонс-трировать это.

    Просто сравни объем кода и подумай еще раз кто и чего не умеет использовать.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[11]: На базе чего лучше всего продемонстрировать ООП?
    От: igna Россия  
    Дата: 25.06.10 12:55
    Оценка:
    Здравствуйте, LaPerouse, Вы писали:

    LP>ООП рулит для всех задач, где нужно программировать. Потому что это не просто парадигма программирования, это способ построения архитектуры системы. Если ты считаешь, что для какой-то задачи ООП не подходит, значит ты не умеешь его использовать.


    Загнул так загнул. Прям для всех, такого неосторожного заявления еще не видел.

    Я вот долго надеялся встретить хотя бы один пример задачи, где "ООП рулит", и спрашивал здесь тоже, ан нет, никто примера такой задачи не привел. Обрати внимание, я не утверждаю, что таких задач нет, а просто говорю, что я таких не знаю. Может быть у тебя есть минимальный пример задачи, решить которую используя ООП проще чем без него?
    Re[3]: Circle-ellipse problem
    От: igna Россия  
    Дата: 25.06.10 13:00
    Оценка:
    Здравствуйте, andy1618, Вы писали:

    A>Круги, эллипсы говорите? Это же как раз классический парадокс о невозможности наследования (то же, кстати, касается и прямоугольника-квадрата):


    Это не настоящий парадокс, неизменяемый круг (а именно таковым он является в математике) без проблем наследуется от эллипса.
    Re[12]: На базе чего лучше всего продемонстрировать ООП?
    От: LaPerouse  
    Дата: 25.06.10 13:23
    Оценка: :)
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, LaPerouse, Вы писали:


    LP>>ООП рулит для всех задач, где нужно программировать. Потому что это не просто парадигма программирования, это способ построения архитектуры системы. Если ты считаешь, что для какой-то задачи ООП не подходит, значит ты не умеешь его использовать.

    WH>http://rsdn.ru/article/nemerle/Amplifier.xml#EJNAE
    Автор(ы): Чистяков Влад (VladD2)
    Дата: 03.03.2007
    Язык программирования Nemerle заинтересовал многих в первую очередь своей мощнейшей подсистемой мак-росов. Однако и без них Nemerle предоставляет ряд су-щественных улучшений по сравнению с традиционными, императивными языками программирования (такими как Java, C# и C++).
    Nemerle, кроме традиционного императивного програм-мирования, поддерживает функциональное программи-рование. Это выражается в наличии конструкций, упро-щающих манипуляцию функциями, построение и анализ сложных структур данных и т.п.
    К сожалению, если вы не использовали возможности, присущие функциональным языкам ранее, то вам будет трудно оценить, насколько Nemerle может оказаться вам полезным в реальной повседневной работе. Данная статья призвана в неформальной форме продемонс-трировать это.

    WH>Просто сравни объем кода и подумай еще раз кто и чего не умеет использовать.

    Еще раз: ООП — это не только и не столько парадигма программирования, сколько набор архитектурных решений. Вынесли красивую и короткую Nemerle-версию в компоненту NiceExpressionCalculator с сервисом ExpressionCalculator — поздравляю, вы применили ООП. А красота и краткость — особенность реализации данного конкретного NiceExpressionCalculator. Которая меня, как потребителя сервиса ExpressionCalculator не колышет. Я вполне могу воспользоваться C#-ским UgglyExpressionCalculator, лишь бы он корректно реализовывал сервис ExpressionCalculator. Теперь понятно, о чем я? Я о том, что ООП позволяет создавать модульные, расширяемые решения. А ты опускаешься до деталей реализации. Мне пофиг на эти детали, делай их хоть на коболе, но если ты предоставил свое решение в виде компоненты с сервисом, ты задействовал ООП.
    Социализм — это власть трудящихся и централизованная плановая экономика.
    Re[12]: На базе чего лучше всего продемонстрировать ООП?
    От: LaPerouse  
    Дата: 25.06.10 13:26
    Оценка:
    Здравствуйте, igna, Вы писали:

    I>Я вот долго надеялся встретить хотя бы один пример задачи, где "ООП рулит", и спрашивал здесь тоже, ан нет, никто примера такой задачи не привел.


    С термином "компонентное программирование" знаком? Приложения с плагинами использовал? Иногда стоит открывать глаза пошире.
    Социализм — это власть трудящихся и централизованная плановая экономика.
    Re[13]: На базе чего лучше всего продемонстрировать ООП?
    От: igna Россия  
    Дата: 25.06.10 13:57
    Оценка:
    Здравствуйте, LaPerouse, Вы писали:

    LP>С термином "компонентное программирование" знаком? Приложения с плагинами использовал? Иногда стоит открывать глаза пошире.


    Так открой: Differences from object-oriented programming.
    Re[14]: На базе чего лучше всего продемонстрировать ООП?
    От: LaPerouse  
    Дата: 25.06.10 14:03
    Оценка: :)
    Здравствуйте, igna, Вы писали:

    I>Здравствуйте, LaPerouse, Вы писали:


    LP>>С термином "компонентное программирование" знаком? Приложения с плагинами использовал? Иногда стоит открывать глаза пошире.


    I>Так открой: Differences from object-oriented programming.


    Там написан бред сивой пьяной кобылы, неподтвержденный источниками. Википедия, фигли. Вот это особенно радует:

    OOP and the related disciplines of object-oriented design and object-oriented analysis focus on modeling real-world[citation needed] interactions and attempting to create "verbs" and "nouns" which can be used in intuitive


    Это слова человека, который с ООП знаком из примеров про обезьяны-бананы.

    Компонентное сервис-ориентированное программирование — это и есть современный ООП.
    Социализм — это власть трудящихся и централизованная плановая экономика.
    Re[15]: На базе чего лучше всего продемонстрировать ООП?
    От: igna Россия  
    Дата: 25.06.10 14:10
    Оценка:
    Здравствуйте, LaPerouse, Вы писали:

    LP>Компонентное сервис-ориентированное программирование — это и есть современный ООП.


    Ну тогда да, "ООП рулит". Только это называется подмена понятий. Сначала столько лет называли ООПой всякую лабуду, потом, вместо того чтобы признать свое заблуждение, лабуду заменили разумными концепиями, и натянули на них старое название.
    Re[16]: На базе чего лучше всего продемонстрировать ООП?
    От: LaPerouse  
    Дата: 25.06.10 14:20
    Оценка:
    Здравствуйте, igna, Вы писали:

    I>Здравствуйте, LaPerouse, Вы писали:

    LP>>Компонентное сервис-ориентированное программирование — это и есть современный ООП.
    I>Ну тогда да, "ООП рулит". Только это называется подмена понятий. Сначала столько лет называли ООПой всякую лабуду, потом, вместо того чтобы признать свое заблуждение, лабуду заменили разумными концепиями, и натянули на них старое название.

    Уверяю тебя, вменяемые специалисты никогда (ну разве что в ранние годы становления ООП, которые я не застал) не подразумевали под ОО-дизайном (голосом Дроздова) "объекты реального мира, взаимодействующие между собой прямо как в дикой природе". ООП в первую очередь — это способ создания модульных, расширяемых, устойчивых к изменениям систем. И всегда им был.
    Социализм — это власть трудящихся и централизованная плановая экономика.
    Re[17]: На базе чего лучше всего продемонстрировать ООП?
    От: igna Россия  
    Дата: 25.06.10 14:36
    Оценка:
    Здравствуйте, LaPerouse, Вы писали:

    LP>Уверяю тебя, вменяемые специалисты никогда (ну разве что в ранние годы становления ООП, которые я не застал) не подразумевали под ОО-дизайном (голосом Дроздова) "объекты реального мира, взаимодействующие между собой прямо как в дикой природе".


    Да, вот кстати. Что же подразумевали вменяемые специалисты под ОО-дизайном?
    Re[4]: Circle-ellipse problem
    От: andy1618 Россия  
    Дата: 25.06.10 15:21
    Оценка:
    Здравствуйте, igna, Вы писали:

    A>>Круги, эллипсы говорите? Это же как раз классический парадокс о невозможности наследования (то же, кстати, касается и прямоугольника-квадрата):


    I>Это не настоящий парадокс, неизменяемый круг (а именно таковым он является в математике) без проблем наследуется от эллипса.


    Хм, сомнительное получается наследование — а куда девать разные специфические понятия эллипса (размеры полуосей, фокусы и т.п.)? Кругу то ведь только радиус нужен.

    Насчёт неизменяемости — да, это хороший выход, но в нашем случае речь шла о редакторе: "Классический пример: векторный редактор — круги, прямоугольники, эллипсы. Переопределяется рисование, изменение масштаба, повороты и т.д...".

    Вообще, спорить по этому поводу нет желания, целью было просто обозначить старые добрые ОО-грабли, на которые можно напороться.
    Re[10]: На базе чего лучше всего продемонстрировать ООП?
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 25.06.10 15:48
    Оценка:
    Здравствуйте, Воронков Василий, Вы писали:

    ВВ>Что-то мне кажется, что сапер в плане ООП будет очень сильно похож на простенький спред а ля Эксель, плюс которого еще и в том, что можно использовать разработанный ранее калькулятор.


    Он будет проще и понятнее.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[11]: На базе чего лучше всего продемонстрировать ООП?
    От: Воронков Василий Россия  
    Дата: 25.06.10 15:49
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    ВВ>>Что-то мне кажется, что сапер в плане ООП будет очень сильно похож на простенький спред а ля Эксель, плюс которого еще и в том, что можно использовать разработанный ранее калькулятор.

    AVK>Он будет проще и понятнее.

    Не, это не аргумент. Ты предыдущие части статьи читал?
    Re[5]: Circle-ellipse problem
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 25.06.10 16:09
    Оценка:
    Здравствуйте, andy1618, Вы писали:

    A>Хм, сомнительное получается наследование — а куда девать разные специфические понятия эллипса (размеры полуосей, фокусы и т.п.)? Кругу то ведь только радиус нужен.


    Для неизменяемого круга — никуда не девается. Если мы собираемся соблюдать LSP, то все это у круга должно быть, чтобы он мог фигурировать в качестве разновидности эллипса в алгоритмах, работающих с эллипсом. При этом внутрях он, разумеется, может ханить только радиус, а "размеры полуосей, фокусы и т.п." вычислять при запросе.

    A>Насчёт неизменяемости — да, это хороший выход, но в нашем случае речь шла о редакторе


    А если речь о редакторе, то надо сразу определиться, может ли круг стать эллипсом. Если может — никакого класса Круг не должно быть в принципе. За ненадобностью.

    A>Вообще, спорить по этому поводу нет желания, целью было просто обозначить старые добрые ОО-грабли, на которые можно напороться.


    Нет там, на самом деле, никаких граблей. Есть лишь плохое понимание. Это очень похоже на дурацкую задачку про сдачу. Там тоже некоторые упорно видят несуществующий парадокс.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re: Прав vdimas, не наследованием единым жив человек. :)
    От: Wolverrum Ниоткуда  
    Дата: 25.06.10 16:40
    Оценка:
    А чего все к наследованию прицепились?! Вокруг него, что, весь ООП вертится?
    Наследование ж, практически, самое вредное понятие ООП!

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

    Без оглядки на то, что есть "ФП", "метапрограммирование", "АОП" и пр. слова — так можно до седых волос выбирать. Меру пора знать.

    PS
    Хочешь показать ООП — покажи примеры повторного использования кода в разных парадигмах с плюсами и минусами (на этапе ознакомления — лушше только с плюсами, а минусы — несколько позже), варианты иерархий над объектами (ну, способы разбиения на классы — а лучше и не показывать даже), проведи связи между объектами и ролями, приведи понятие абстракции и конкретизации... Ну, в общем, копай в сторону от иерархий.
    Re[2]: upd
    От: Wolverrum Ниоткуда  
    Дата: 25.06.10 17:39
    Оценка:
    Упс... 2 раза умудрился..
    Re[6]: Circle-ellipse problem
    От: andy1618 Россия  
    Дата: 25.06.10 18:26
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    A>>Насчёт неизменяемости — да, это хороший выход, но в нашем случае речь шла о редакторе


    AVK>А если речь о редакторе, то надо сразу определиться, может ли круг стать эллипсом. Если может — никакого класса Круг не должно быть в принципе. За ненадобностью.


    Вот, об том и речь! Это я и назвал
    Автор: andy1618
    Дата: 11.06.10
    фразой "либо искусно обойти"
    Re[7]: Circle-ellipse problem
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 25.06.10 18:48
    Оценка:
    Здравствуйте, andy1618, Вы писали:

    A>Вот, об том и речь! Это я и назвал
    Автор: andy1618
    Дата: 11.06.10
    фразой "либо искусно обойти"


    Это не обход. В статически типизированных языках классификация может быть осуществлена только по статическим признакам. Если тебе нужна динамика — возьми динамический язык и все будет хорошо.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[2]: Прав vdimas, не наследованием единым жив человек. :)
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 25.06.10 18:56
    Оценка:
    Здравствуйте, Wolverrum, Вы писали:

    W>Если так уж очень хочется именно развесистой клюквы иерархии — абстрактную фабрику, мост, интерпретатор (+ повторное использование кода) в зубы — и вперед! Задачи по этим 4 понятиям можно до пенсии сочинять, и все будут.


    Понимаешь, нужно не просто продемонстрировать ООП, а продемонстрировать его преимущество над другими подходами. И тут возникает некоторый проблем — ООП хорошо рулит совсем не в задачах симуляции (это тут вообще не причем), а там где нужна сложная архитектура. А архитектура, тем более сложная, придумывается не ради самое себя, а чтобы удешевить кодирование. Удешевление же кодирования тем критичнее, чем больше размер проекта. Отсюда — ООП тем лучше себя проявляет, чем больше размер этого самого проекта. Исходя из этого, придумать маленький пример, который бы продемонстрировал преимущества ООП ох как непросто. И отталкиваться нужно, наверное, не от преимуществ ООП, а от недостатков ФП, коль скоро это основной предмет сравнения. Например ФП очень "не любит" долгоживущего изменяемого стейта. Или ввода/вывода на реальные устройства.

    P.S. Разумеется, это было мое сугубое ИМХО.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[3]: Прав vdimas, не наследованием единым жив человек. :)
    От: Wolverrum Ниоткуда  
    Дата: 25.06.10 21:50
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Понимаешь, нужно не просто продемонстрировать ООП, а продемонстрировать его преимущество над другими подходами.


    Это я как раз понял... Моя точка зрения на все это состоит в том, что все эти парадигмы вполне себе взаимозаменяемы (см. например: паттерны на хаскеле
    Автор: Курилка
    Дата: 03.05.10
    , или монады в ООП и, скажем, крестах, в частности), и посему нет особого смысла рассуждать, искать задачу в ключе "достоинства-недостатки"; кажется, важнее показать основные приемы использования, чем пытаться выяснить какой из способов написать программу лучше... Бо народ не то что в ООП/ФП — в структурном программировании "плавает" (и я, похоже, не исключение )...
    Re[5]: Circle-ellipse problem
    От: igna Россия  
    Дата: 26.06.10 06:22
    Оценка: 5 (1)
    Здравствуйте, andy1618, Вы писали:

    A>Насчёт неизменяемости — да, это хороший выход, но в нашем случае речь шла о редакторе: "Классический пример: векторный редактор — круги, прямоугольники, эллипсы. Переопределяется рисование, изменение масштаба, повороты и т.д...".


    Если фигуры изменяемые, то наследовать круг от эллипса нельзя; но дело в том, что парадокса и в этом случае нет, поскольку этот самый якобы парадокс выводится из утверждения, что "в математике круг это эллипс", а в математике фигуры неизменяемые.
    Re[2]: Прав vdimas, не наследованием единым жив человек. :)
    От: igna Россия  
    Дата: 26.06.10 06:31
    Оценка:
    Здравствуйте, Wolverrum, Вы писали:

    W>А чего все к наследованию прицепились?! Вокруг него, что, весь ООП вертится?


    Да.

    W>Наследование ж, практически, самое вредное понятие ООП!


    Тоже да.
    Re[2]: Прав vdimas, не наследованием единым жив человек. :)
    От: BulatZiganshin  
    Дата: 27.06.10 11:48
    Оценка:
    Здравствуйте, Wolverrum, Вы писали:

    W>А чего все к наследованию прицепились?! Вокруг него, что, весь ООП вертится?


    ты с ФП знаком? без наследования ООП трудно что-то противопоставить ФП, поскольку абстрактные типы данных держат они оба
    Люди, я люблю вас! Будьте бдительны!!!
    Re[17]: На базе чего лучше всего продемонстрировать ООП?
    От: vdimas Россия  
    Дата: 27.06.10 13:44
    Оценка:
    Здравствуйте, Klapaucius, Вы писали:

    K>А чем описание dataflow на несколько экранов менее удобно, чем ООП код на несколько экранов?


    ООП на несколько экранов тоже скорее исключение. В принипе, в графическом виде, да еще с автоматической кодогенерацией — ничем.
    Ну разве что малым пока количеством устоявшихся общепризнанных примитивов, т.е. черевато потенциально слабой инкапсуляцией/декомпозицией (раздутием ф-сти слоев) и изобретением велосипедов.

    Опять же — гонки! Без обрубания потоков вычислений явными состояниями все очень усложняется. Почему в электронике те же асинхронные автоматы, несмотря на их потрясающую эффективность отношения функциональность/вентиль, используются крайне редко? Просто даже среди спецов их умеют проектировать 1%, если не меньше, остальные делают "по старинке", на тактах. На тактах есть мощные мат.аппараты верификации/эмуляции, а пространство состояний асинхронного автомата, включая все возможные неустойчивые, куда как больше. На тактах ведь и проще и надежней. 99.99% всей автоматики сейчас работает потактово, а это потеря до более половины эффективности в общем случае, т.к. м/у фронтами тактовых импульсов железо тупо простаивает, "устаканивается".

    А программа в общем виде (кроме случаев явного эмуляция автоматных состояний) — именно асинхронный автомат. И вот на это все навернуть автоматическое, т.е. слабоконтроллируемое распространение сигнала? Что-то мне подсказывает, что всерьез пользоваться этой технологией смогут очень немногие.

    V>>Без полноценного графического инструмента, типа как редактора схем электрических функциональных, решать на этой технологии даже задачи среднего уровня — утопия.


    K>Ну, если так нужен графический инструмент — это проблема чисто техническая. Визуализировать dataflow даже легче.

    K>Кроме того, электрические схемы ведь тоже сейчас на языках программирования описывают, разве нет?

    Более-менее большие схему полностью "вручную" в тексте — такая же утопия. Обычно спец втыкает в сложную графическую схему из нескольких десятков компонентов и кучей связей за считанные минуты, парсить с той же скоростью текстовый исходник нереально (описание связей — самое нагрузочное в информационном плане). Сами редакторы обычно двусторонние или имеют ср-ва туда-сюда перегонять (ф-сть import/export), т.к. многие повторяющиеся вещи действительно быстрее набить в тексте, чем в графике, через copy&paste и edit->replace.

    Ну это как набивка HTML, даже если набиваешь полностью в блокноте, то контроллируешь его постоянно в процессе работы обязательно в рендеренном виде, в выделенном суть.
    Re[18]: На базе чего лучше всего продемонстрировать ООП?
    От: Klapaucius  
    Дата: 28.06.10 11:46
    Оценка:
    Здравствуйте, vdimas, Вы писали:

    V>Ну разве что малым пока количеством устоявшихся общепризнанных примитивов, т.е. черевато потенциально слабой инкапсуляцией/декомпозицией (раздутием ф-сти слоев) и изобретением велосипедов.


    О, например, в узких кругах (функциональных) реактивных программистов примитивы вполне устоялись, так что с декомпозицией и инкапсуляцией все в порядке.
    Это, собственно, те же примитивы, что и в ФП: аппликативные функторы, монады, стрелки.

    V>Опять же — гонки! Без обрубания потоков вычислений явными состояниями все очень усложняется. Почему в элек6тронике те же асинхронные автоматы, несмотря на их потрясающую эффективность отношения функциональность/вентиль, используются крайне редко? Просто даже среди спецов их умеют проектировать 1%, если не меньше, остальные делают "по старинке", на тактах. На тактах есть мощные мат.аппараты верификации/эмуляции, а пространство состояний асинхронного автомата, включая все возможные неустойчивые, куда как больше. На тактах ведь и проще и надежней. 99.99% всей автоматики сейчас работает потактово, а это потеря до более половины эффективности в общем случае, т.к. м/у фронтами тактовых импульсов железо тупо простаивает, "устаканивается".


    Ну, собственно, в ФРП первоначально была, в каком-то смысле, аналогичная модель: pull каждые x секунд, с понятными сложностями в виде низкой производительности (не все так страшно, все же: x меньше единицы) и тайм-ликов. Сейчас разрабатывают более совершенные подходы.

    V>А программа в общем виде (кроме случаев явного эмуляция автоматных состояний) — именно асинхронный автомат. И вот на это все навернуть автоматическое, т.е. слабоконтроллируемое распространение сигнала? Что-то мне подсказывает, что всерьез пользоваться этой технологией смогут очень немногие.


    Работы в этом направлении ведутся.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
    'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
    Re: На базе чего лучше всего продемонстрировать ООП?
    От: Gaperton http://gaperton.livejournal.com
    Дата: 28.06.10 20:54
    Оценка: :)))
    Здравствуйте, VladD2, Вы писали:

    VD>К сожалению, в голову не приходит хороших идей для демонстрации ООП-а.


    Дожили.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.