Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП маст дай! 
:(
    Опции темы
mrbrooks
Дата 29.9.2010, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Vex, просто для справки - ты когда писал (или пишешь) на дельфи - ты придерживался процедурного или объектно ориентированного программирования? smile


Цитата(mes @  28.9.2010,  21:58 Найти цитируемый пост)
вот на С++

OMG!
PM MAIL   Вверх
Shaggie
Дата 29.9.2010, 08:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(djamshud @  28.9.2010,  12:33 Найти цитируемый пост)
Инкапсуляция != скрытие.

Согласен, точнее будет "сокрытие <- инкапсуляция"  smile 

Цитата(djamshud @  28.9.2010,  12:33 Найти цитируемый пост)
Мы написали функцию, в ней низкоуровневая реализация. Что куда и с чем инкапсулировалось? Или мы будем называть инкапсуляцией написание любой процедуры?

Давай напиши одну единственную функцию, которая умеет открывать/закрывать системный COM-порт, принимать и посылать через него байтики, всячески им руководить и буферизовать данные, при этом не вываливая наружу сам порт, всё его состояние и вспомогательный функционал. Ну даже совокупность функций, жонглирующих переменными. И внезапно окажется, что всё это может быть удобно (sic!) инкапсулировано в объекте.

Цитата(djamshud @  28.9.2010,  12:33 Найти цитируемый пост)

Какие еще потроха у высоких то материй?! На этом уровне занимаются спариванием сферических коней в вакууме.

Интересная, кстати, работа, я бы на это посмотрел и даже поучаствовал (хинт: смотри поле "где" в окошке информации о пользователе форума). Однако грамотное спаривание подразумевает работу интерфейсами, и при правильно спроектированной архитектуре можно подменить один сервис другим, ни капли не меняя в остальной программе. Это и есть инкапсуляция. Примеры можно нагуглить по словам Dependency Injection Framework и Inversion of Control.

Цитата(djamshud @  28.9.2010,  12:33 Найти цитируемый пост)
Отныне максимум - защита от дурака, т.е. protected на языке С++ и никаких private.

Ну можно же было использовать друзей!  smile 
Ответь, пожалуйста, на один вопрос - а почему тогда не public? Зачем эти странности с правами доступа, если самому же их приходится хитрым противоестественным образом обходить?

Цитата(djamshud @  28.9.2010,  12:33 Найти цитируемый пост)

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

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



Цитата(mes @  28.9.2010,  21:58 Найти цитируемый пост)

Цитата(Shaggie @  28.9.2010,  10:02 Найти цитируемый пост)
Библиотека контейнеров прекрасно пишется труъ-функциональным способом

имелся ввиду процедурный стиль ?

Цитата(Shaggie @  28.9.2010,  10:02 Найти цитируемый пост)
, ни капли не теряя в удобстве использования

некоторое удобство теряется из за незнания контейнера как управлять жизнью объекта и создавать копии..

Имеется в виду именно функциональный стиль, примеры реализации контейнеров в OCaml, Haskell, Lisp, Erlang иже с ними. Но там другая среда исполнения, сборщик мусора сам следит за временем жизни хранимых объектов.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
azesmcar
Дата 29.9.2010, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Vex @  28.9.2010,  20:43 Найти цитируемый пост)
ну и что. я же не могу написать

Я конечно дико извиняюсь за то, что лезу в столь высокоинтеллектуальные вопросы, не внеся свою лепту в дискуссию (неохота холиварить, мне здесь больше нравиться роль независимого зрителя с попкорном smile ) smile но если речь все еще про C# то я не знаю где Вы его учили
Код

static void Main()
{
    Func<int, int> subprogram = (x) => x * x;
    Console.WriteLine(subprogram(10));
}

и тоже самое на C++ - раз (по старому стандарту)
Код

int main()
{
    struct {
        int operator()(int x) const {
            return x * x;
        }
    } subprogram;
    std::cout << subprogram(10) << std::endl;
}

и два (по новому, смотрите скоро, на первом канале)
Код

auto subprogram = [](int x) -> int { return x * x; };
std::cout << subprogram(10) << std::endl;

разве нужно что-то еще?

Это сообщение отредактировал(а) azesmcar - 29.9.2010, 09:35
PM   Вверх
mrbrooks
Дата 29.9.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(azesmcar @  29.9.2010,  10:28 Найти цитируемый пост)
но если речь все еще про C# то я не знаю где Вы его учили

а если дизассемблировать и посмотреть что на самом деле происходит  smile 

хотя прикрутить делегат и заюзать лямбду или анонимный метод - отличный ответ на претензии. smile 
PM MAIL   Вверх
azesmcar
Дата 29.9.2010, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(mrbrooks @  29.9.2010,  10:02 Найти цитируемый пост)
а если дизассемблировать и посмотреть что на самом деле происходит  smile 

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

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

Это сообщение отредактировал(а) azesmcar - 29.9.2010, 10:26
PM   Вверх
Vex
Дата 29.9.2010, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

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




Модератор: Сообщение скрыто.



--------------------
Слава Україні.
PM   Вверх
azesmcar
Дата 29.9.2010, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Vex @  29.9.2010,  10:29 Найти цитируемый пост)
Мы же на ты вроде )  да и мне можно по простому говорить "ты ##### не знаешь" =) я не обижаюсь )

да нет..это я шучу так smile 
на самом деле я предложил это как альтернативу, которая решает твою задачу.

Цитата(Vex @  29.9.2010,  10:29 Найти цитируемый пост)
я знаю что так можно сделать, но это не очень кошерно

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

Цитата(Vex @  29.9.2010,  10:29 Найти цитируемый пост)
тем более что насколько я знаю в нет 2,0 не было такой возможности. 

ну .NET 2 в прошлом, причем очень далеком. Там вообще много недоделок было, но со временем совершенствуют, раз уж говорим о C# то я полагаю надо говорить о последней версии (4.0).

Это сообщение отредактировал(а) smartov - 4.10.2010, 14:06
PM   Вверх
mrbrooks
Дата 29.9.2010, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(Vex @  29.9.2010,  11:29 Найти цитируемый пост)
тем более что насколько я знаю в нет 2,0 не было такой возможности.

в таком случае:
Цитата(mrbrooks @  29.9.2010,  11:02 Найти цитируемый пост)
анонимный метод - отличный ответ на претензии


Цитата(azesmcar @  29.9.2010,  11:26 Найти цитируемый пост)
будто не плевать..

обычно я этим и занимаюсь  smile 
PM MAIL   Вверх
azesmcar
Дата 29.9.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(mrbrooks @  29.9.2010,  10:36 Найти цитируемый пост)
обычно я этим и занимаюсь  smile  

и это правильно, главное, что за это платят smile 
PM   Вверх
Любитель
Дата 30.9.2010, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(mrbrooks @  29.9.2010,  10:02 Найти цитируемый пост)
а если дизассемблировать и посмотреть что на самом деле происходит

А если дизассемблировать код с дельфи - о, ужас, вообще функций нету smile 

Цитата(Vex @  29.9.2010,  10:29 Найти цитируемый пост)
тем более что насколько я знаю в нет 2,0 не было такой возможности. 

Во-первых, дело не в .Net а в шарпе. Во-вторых, анонимные делегаты были во 2-ом ещё (шарпе). Лямбды и анонимные делегаты и есть "локальные функции".

Цитата(Vex @  28.9.2010,  10:40 Найти цитируемый пост)
а в джаве тоже нет локальных функций? 

Ну что-т тип такого (если что - яверы поправят красивее):
Код

void someMethod()
{
   ISubProgram subProgram = new ISubProgram()
   {
      void run() {
         //
      }
   };

   subProgram();
}


И самое интересное. И шарповские делегаты (неважно откуда они взялись - явный метод, анонимный делегат или лямбда) и даже яверная чисто ООП-шная реализация круче чем то, что в Дельфи, хотя бы потому, что это первоклассные сущности. А в дельфи для вложенных функций это неприменимо (по крайней мере в те времена, когда я это видел). Как написать на дельфи что-то вроде банального collection.Where(x => x > 5)?

А вообще - это полный оффтопик smile 


--------------------
PM MAIL ICQ Skype   Вверх
baldina
Дата 30.9.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ООП не метод, а методология. Как любая методология для применения требует еще толику мозгов. И понимания, какую именно методологию полезно применять в конкретном случае. ОО это подход, и MAKCim абсолютно прав.
Что касается языков - дело вкуса. С++ поддерживает 3.5 парадигмы (0.5 на функциональное), что позволяет для большинства задач выбрать средство, оставаясь в пространстве языка. Выгода в краткости и читабельности кода.

А главное почти все присутствующие (в т.ч. молчаливо жующие попкорн) все отлично понимают, и просто развлекают друг друга... В надежде что придет серьезный mes и не даст умереть изначально тухлой теме)))

ЗЫ: Мнение А.Степанова насчет объектов/алгоритмов и сравнение с аксиомами/доказательствами имхо весьма слабая позиция. Если интересно, могу развить.
PM MAIL   Вверх
mes
Дата 30.9.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(baldina @  30.9.2010,  10:56 Найти цитируемый пост)
серьезный mes 

 он разве серьезный ?  smile 

Цитата(baldina @  30.9.2010,  10:56 Найти цитируемый пост)
 и не даст умереть изначально 

он всего лишь пытался пресечь неаргументированные выпадки против средств С++,
которые и были сутью темы, не смотря на название..
 smile

Добавлено через 3 минуты и 4 секунды
Цитата(baldina @  30.9.2010,  10:56 Найти цитируемый пост)
Мнение А.Степанова насчет объектов/алгоритмов и сравнение с аксиомами/доказательствами имхо весьма слабая позиция. 

но где то в глубине все ж проглядывает здравая и интересная мысль. smile наверно просто программирование еще не доросло до этого..

Цитата(baldina @  30.9.2010,  10:56 Найти цитируемый пост)
Если интересно, могу развить. 

с удовольствием бы выслушал бы Ваше мнение по этому поводу.
smile



--------------------
PM MAIL WWW   Вверх
baldina
Дата 30.9.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mes @  30.9.2010,  12:46 Найти цитируемый пост)
Цитата(baldina @  30.9.2010,  10:56 )
Мнение А.Степанова насчет объектов/алгоритмов и сравнение с аксиомами/доказательствами имхо весьма слабая позиция. 

но где то в глубине все ж проглядывает здравая и интересная мысль.  наверно просто программирование еще не доросло до этого..

Цитата(baldina @  30.9.2010,  10:56 )
Если интересно, могу развить. 

с удовольствием бы выслушал бы Ваше мнение по этому поводу.


Буду краток)))

Начну с тривиального постулата, что универсальных инструментов не бывает.
Помимо ОО подхода есть и множество других. На разных этапах и для разных частей задачи одни будут иметь преимущество перед другими, поэтому вопрос OOP vs Generic vs Functional vs ... вообще не стоит.

Степанов в интервью говорит:
Цитата

I find OOP technically unsound. It attempts to decompose the world in terms of interfaces that vary on a single type. To deal with the real problems you need multisorted algebras - families of interfaces that span multiple types. I find OOP philosophically unsound. It claims that everything is an object. Even if it is true it is not very interesting - saying that everything is an object is saying nothing at all. I find OOP methodologically wrong. It starts with classes. It is as if mathematicians would start with axioms. You do not start with axioms - you start with proofs. Only when you have found a bunch of related proofs, can you come up with axioms. You end with axioms. The same thing is true in programming: you have to start with interesting algorithms. Only when you understand them well, can you come up with an interface that will let them work.

Т.е. он считает ООП 
1. технически несостоятельным, потому что ООП пытается разложить мир в терминах интерфейсов, наследуемых от одного типа.
Думаю, "технически несостоятельный" - слишком сильное выражение в данном случае. Хотя бы потому, что ООП на самом деле не пытается это сделать: ОО подход - определить объекты, а потом искать у них общее - типы. Типы обобщаются - получается иерархия наследования. Никто не мешает обобщать по горизонтали - получаются обобщенные типы (вот вам и многосортные алгебры). Это уже не ОО компонент, но вполне в рамках общей методологии разработки систем - декомпозиции.

2. философски несостоятельным, потому что "все есть объект". "Даже если это правда, это не очень интересно: сказать, что все является объектом значит не сказать ничего."
Я лично ничего против объектной философии не имею, т.к. все действительно можно представить в виде объектов. Кто-нить приведет пример, когда это не так? Степанов тоже не может, иначе он сказал бы об альтернативе и не сказал бы "даже если это правда".
Представление в виде объектов, конечно, не панацея, но в целом вполне удобный прием абстрагирования.
Кстати, сравните с философией Unix "все есть файл". 

3. методологически неправильным, потому что сначала разрабатываются классы (читай - интерфейсы), а потом реализация. В качестве контрпримера приводится математика с аксиомами и доказательствами.
Это обвинение посерьезней, но оно в корне неверно.
Во-первых, наука не проектирование. Если бы в процессе проектирования мы ставили эксперименты и пытались на их основе вывести законы, проект никогда бы не завершился. В основе проектирования - анализ системы. В основе науки - анализ фактов и построение гипотез относительно структуры системы. Чувствуете разницу?
Во-вторых, начинать с реализации уместно только при разработке библиотек. Пропаганда применения разработки снизу вверх? Не верю, для сложных систем это тупиковый путь, т.к. слишком большие затраты на анализ полученных инструментов, их обобщение и интеграцию. Значит основная мысль такая: программа суть реализация алгоритма, а значит с него и надо начинать. Но этот алгоритм на самом деле конгломерат алгоритмов, соединенных причудливым образом. Нельзя объять необъятное. Поэтому начинается все с прецедентов использования, деления на компоненты и т.д. Т.е. применение принципа "разделяй и властвуй". Т.е. того, чему служит ООП.

Вот где-то так. Извините, что длинно, но и здесь не все поместилось))

Я кстати не верю, что Степанов действительно так считает. Скорее истина подавлена хорошим слогом ради красивого интервью.

PM MAIL   Вверх
baldina
Дата 30.9.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Решил еще 5 копеек добавить для ясности.

Естественно, что разработать интерфейс можно лишь после того, как будет понятно, что должен делать алгоритм. Т.к. именно исполнитель диктует, какие исходные данные ему потребуются для решения задачи.
С этой позиции Степанов прав.
Но на самом деле адепты ООП и Степанов говорят об одном, ведь разработка класса (интерфейса класса) суть понимание назначения класса. И отнюдь не означает разработку интерфейса без понимания точки приложения усилий. Это просто игра слов: 
класс, решающий задачу, должен иметь следующий интерфейс... 
алгоритм, решающий задачу, должен получать следующие данные...
PM MAIL   Вверх
mes
Дата 30.9.2010, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



наченем с философии.. 
Цитата(baldina @  30.9.2010,  14:49 Найти цитируемый пост)
 лично ничего против объектной философии не имею, т.к. все действительно можно представить в виде объектов.

можно, но относительно.. 
Выражение "все есть объект"  должно накладывать некие отличительные признаки и обладать некоторыми гарантиями,
иначе ничем не будет отличаться от "не все есть объект" smile
Страуструп в этом вопросе подерживает Степанова, и считает что "все есть void*", ибо делать все объектами несет дополнительные расходы и не согласуется с идеологией C++  smile 

P.S.  некоторые моменты обострил специально для краткости.. 



--------------------
PM MAIL WWW   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

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


 




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


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

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