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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что должно быть как минимум в ООП-программе? 
:(
    Опции темы
krundetz
Дата 28.3.2013, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)




Цитата(SKrivosein @  25.3.2013,  11:16 Найти цитируемый пост)
При определённых условиях создавать отдельный обьект, только для того чтобы передать методу допустим 8 параметров, чего хорошего? Как такое облегчает лoгику программы, да и производительность тоже? 

1. Видимо что то не так со структурой и логикой, раз нужен объект прослойка только для передачи параметров методу(хотя не стоит забывать про шаблоны проектирования Адаптер, Прокси и Декоратор). Либо мы можем использовать этот объект в других местах, либо у нас этот метод работает как не пришей собаки хвост. Вообще все преимущество объектов и их методов, в том что первые могут хранить состояние, а вторые с этим состоянием работать.
2. Производительность разговор отдельный поэтому я его и не затрагивал. А вот логику программы наличие объектов облегчает, при условие конечно грамотного проектирования, так как объект хранит состояние и этим состоянием можно управлять через него. Ведь можно сделать так:
Код

class Сircle {
    private radius;
    private x;
    private y;
    private weightLine;
    private color;

    public Circle(x, y, radius, weightLine, color) {
    
    }

    public show() {
        ...
    }
    
}

а можно так:
Код

var x;
var y;
var radius;
var weightLine;
var color;
showCircle(x, y, radius, weightLine, color) {
    ...
}

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


Это сообщение отредактировал(а) krundetz - 28.3.2013, 16:53


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
krundetz
Дата 28.3.2013, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)




Цитата(IKM2007 @  26.3.2013,  22:38 Найти цитируемый пост)
Не надо искуственно создавать классы/структуры только ради каких то чисел, если эти структуры не будут что-то осмысленное из себя представлять(то есть что-то более осмысленное чем кучка параметров). 

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


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
IKM2007
Дата 28.3.2013, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


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




Цитата(krundetz @  28.3.2013,  17:21 Найти цитируемый пост)
ты так говоришь, как будто эти параметры не зависят ни от чего, просто с воздуха их взяли и на бум решили что здесь применим? 

Параметры могут быть из разных классов, никак не связанных между собой. Какой смысл взять и сунуть все в структуру если так более понятно. Получается каждой Функции по Структуре. 


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
krundetz
Дата 29.3.2013, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)




Цитата(IKM2007 @  28.3.2013,  22:50 Найти цитируемый пост)
Параметры могут быть из разных классов, никак не связанных между собой.

если они никак не связаны между собой но используются в одной функции или методе то это как минимум странно, возможно эта функция может быть спокойно разбита на две, так как похоже в ней выполняются одновременно два не связанных между собой действия. Если можно примерчик приведи, посмотрю что ты имеешь в виду.
Цитата(IKM2007 @  28.3.2013,  22:50 Найти цитируемый пост)
Какой смысл взять и сунуть все в структуру если так более понятно.

Ситуации разные бывают, но если дополнительная структура действительно делает код понятнее то ее стоит использовать, даже больше если вдруг появляется желание где то использовать структуру так как это более понятно и логично, а раньше такой структуры у вас нигде не было, то у вас ошибка в проектирование.
Цитата(IKM2007 @  28.3.2013,  22:50 Найти цитируемый пост)
Получается каждой Функции по Структуре.

Не стоит утрировать.

Это сообщение отредактировал(а) krundetz - 29.3.2013, 08:39


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
baldina
Дата 29.3.2013, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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




вот такой пример: класс доступа к веб сервису. для его инициализации требуется
1) параметры сервера
2) параметры для вывода в лог-файл
3) параметры, связанные с задачей

каждая группа параметров содержит несколько подпараметров (например, сервер: url, и информация о прокси - тип, адрес, порт, логин, пароль).

как делать в этом случае?
PM MAIL   Вверх
Zloxa
Дата 29.3.2013, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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




Понравилась статья. Мне кажется - по теме.
Особенно нравится примеры про собаку и счет в банке.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
krundetz
Дата 29.3.2013, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)




Цитата(baldina @  29.3.2013,  09:07 Найти цитируемый пост)
2) параметры для вывода в лог-файл

DI нам в помощь, но наблюдатель будет более предпочтительным.
Цитата(baldina @  29.3.2013,  09:07 Найти цитируемый пост)
3) параметры, связанные с задачей

сколько какие?
Цитата(baldina @  29.3.2013,  09:07 Найти цитируемый пост)
1) параметры сервера

Цитата(baldina @  29.3.2013,  09:07 Найти цитируемый пост)
каждая группа параметров содержит несколько подпараметров

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

на мой взгляд код вида:
Код

class Connector {

    public Connector(Server server, Proxy proxy) {
        ...
    }

    public Response sendRequest(Request request) {
        ...
    }

}

более удобен, чем:
Код

sendRequestServer(serverURL, serverPort, serverProtocol, serverLogin, serverPassword, proxyURL, proxyPort, proxyProtocol, proxyLogin, proxyPassword, ..., requestDate, ...);

и удобнее такого:
Код

conection = createConnection(serverURL, serverPort, serverProtocol, serverLogin, serverPassword, proxyURL, proxyPort, proxyProtocol, proxyLogin, proxyPassword);
sendRequest(conection, requestDate, ...);

самым оптимальным при функциональном подходе будет что то наподобие такого:
Код

struct Connection {
    ...  
}
struct Server {
    ...
}
struct Proxy {
    ...
}
struct Request {
    ...
}
struct Response {
    ...
}
connection = createConnection(Server server, Proxy proxy);
response = sendRequest(Connection connection, Request request);

но даже в этом варианте, я вижу много минусов, так как не получиться скрыть работу с прокси, то есть если они будут не только HTTP, но и Socks, то нам придётся выносить работу с разными вариантами прокси в createConnection, вместо того чтобы подставлять разные классы прокси реализующие один интерфейс.

В общем приведенный тобой пример, говорит больше в пользу ООП или хотябы структурного подхода.

Цитата(Zloxa @  29.3.2013,  09:22 Найти цитируемый пост)
Понравилась статья. Мне кажется - по теме.
Особенно нравится примеры про собаку и счет в банке. 

Ознакомлюсь, выскажу своё мнение.

Это сообщение отредактировал(а) krundetz - 29.3.2013, 10:45


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
baldina
Дата 29.3.2013, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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




Цитата(krundetz @  29.3.2013,  10:44 Найти цитируемый пост)
DI нам в помощь

это те же структуры, только сбоку

Добавлено через 2 минуты и 34 секунды
Цитата(krundetz @  29.3.2013,  10:44 Найти цитируемый пост)
наблюдатель будет более предпочтительным

возможно...

но я не для тебя пример писал, хотелось бы мнение другой стороны услышать

Добавлено через 3 минуты и 12 секунд
Цитата(Zloxa @  29.3.2013,  09:22 Найти цитируемый пост)
Понравилась статья

хабр лежит уже который час
PM MAIL   Вверх
LSD
Дата 29.3.2013, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin




Цитата(Zloxa @  29.3.2013,  10:22 Найти цитируемый пост)
Понравилась статья. Мне кажется - по теме.
Особенно нравится примеры про собаку и счет в банке. 

Цитата
Более того, объектно-ориентированные языки сами зачастую нарушают правило инкапсуляции, предоставляя доступ к данным через специальные методы — getters и setters в Java, properties в C# и т.д.

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

Бу-го-га, наш старый холивар теперь и на хабре smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Freyzer
Дата 30.3.2013, 04:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


обаятельный нахал
**


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




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


--------------------
Advocatus Dei smile. Advocatus Diaboli smileAjo!   
PM MAIL   Вверх
IKM2007
Дата 30.3.2013, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


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




Цитата(krundetz @  29.3.2013,  08:36 Найти цитируемый пост)
если они никак не связаны между собой но используются в одной функции или методе то это как минимум странно, возможно эта функция может быть спокойно разбита на две, так как похоже в ней выполняются одновременно два не связанных между собой действия. Если можно примерчик приведи, посмотрю что ты имеешь в виду.


Хороший пример привел baldina, можно еше что-то такое:

Например функция для добавления нового графического обьекта в конкретную сцену. Параметры:э
ссылка на соответствующую сцену
ссылка на хранилище данных  чтобы своевременно обновить графические елементы в зависимости от поступающих данных
ссылка на обьект трансформатор для перевода значении из хранилища в соответствующие значения для сцены
ссылка на параметры графического обьекта

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

P.S. если честно мне все равно )


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
krundetz
Дата 1.4.2013, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)




Цитата(IKM2007 @  30.3.2013,  18:34 Найти цитируемый пост)
Да, программа должна быть обьектно ориентированной, но не могу понять какое отношение имеют структуры-обертки для параметров к ООП. 

видимо у нас с тобой расхождение в терминологии, да и диалог о структурах больше относиться к передаче параметров методу, а не к ООП. Выше я писал следующие:
Цитата(krundetz @  28.3.2013,  16:36 Найти цитируемый пост)
Видимо что то не так со структурой и логикой, раз нужен объект прослойка только для передачи параметров методу


Цитата(IKM2007 @  30.3.2013,  18:34 Найти цитируемый пост)
P.S. если честно мне все равно ) 

а что тогда дискутируешь?

Цитата(Freyzer @  30.3.2013,  04:47 Найти цитируемый пост)
Господи, чушь какая

ты про что? это ж флейм!

Цитата(baldina @  29.3.2013,  10:47 Найти цитируемый пост)
но я не для тебя пример писал

сразу не понял

Цитата(baldina @  29.3.2013,  10:47 Найти цитируемый пост)
хотелось бы мнение другой стороны услышать

мне бы тоже, но видимо не судьба







--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт.


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

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


 




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


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

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