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

Поиск:

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


Шустрый
*


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




Мое мнение, что в ООП-программа должна содержать:
- не менее 2 классов (один класс должен наследоваться от другого) - для демонстрации принципа наследования 
- не менее 1 приватного члена класса - для демонстрации принципа инкапсуляции
- не менее 1 виртуального метода и не менее 1 перегрузки этого метода - для демонстрации принципа полиморфизма.
- не должно быть функций и переменных, не являющихся членом класса (за исключением ф-и main на С++)

Может быть надо продемонстрировать что-то еще?

Можно ли вот такую программу считать правильной ООП-программой?

Код

class A1
{
     int b;
protected:
     int a;
public:
     virtual int A()
     {
          return a;
      }
};
class B:public A1{
public:
     virtual int A()
     {
          return a+1;
      }
};
void main()
{
}


Это сообщение отредактировал(а) ZZZkoderZZZ - 12.3.2013, 12:23
PM MAIL   Вверх
xvr
Дата 12.3.2013, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия




Цитата(ZZZkoderZZZ @  12.3.2013,  10:31 Найти цитируемый пост)
Мое мнение, что в ООП-программа должна содержать:

Тут не хватает одного слова - "правильная демонстрационная ООП-программа"  smile 

PM MAIL   Вверх
bsa
Дата 12.3.2013, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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




Цитата(ZZZkoderZZZ @  12.3.2013,  11:31 Найти цитируемый пост)
Можно ли вот такую программу считать правильной ООП-программой?

теоретически можно. практически нельзя - она ничего не делает.
А потом, у тебя с оформлением кода проблемы.
Рекомендую не быть чукчей-писателем из известного анекдота, а почитать для начала книжки и порешать задачки из них. Список литературы есть в разделе для Новичков (в ответах на часто задаваемые вопросы).
Кстати, текущее состояние твоих знаний, полное отсутствие опыта, а так же юношеский максимализм, будут препятствовать твоему поступлению на любую вменяемую работу в области программирования.
PM   Вверх
ZZZkoderZZZ
Дата 12.3.2013, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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




Цитата(bsa @ 12.3.2013,  14:53)
А потом, у тебя с оформлением кода проблемы.

Это опять про const ? 
PM MAIL   Вверх
bsa
Дата 12.3.2013, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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




Цитата(ZZZkoderZZZ @  12.3.2013,  15:59 Найти цитируемый пост)
Это опять про const ?  
Нет. Это про оформление кода.
PM   Вверх
baldina
Дата 12.3.2013, 15:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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




вот вполне ОО программа:
Код

#include <iostream>

int main () {
  std::cout << "Hello, world" << std::endl;
}

тут есть объект std::cout, тип которого участвует в наследовании и имеет в своем составе подобъекты с виртуальными функциями.
ему (в ОО терминологии) отправляются сообщения. в качестве сообщения отправляются объекты. 
для этого используются перегруженные операции (это не является обязательной частью ООП, но достойно упоминания как разновидность полиморфизма)

Добавлено через 5 минут и 12 секунд
ZZZkoderZZZ, ОО программа - не самоцель. ООП - инструмент, средство. никому не интересны показатели программы в виде числа классов, объектов, функций, их свойств и т.п.
программа должна делать то, что должна, и быть сопровождаемой. парадигмы, библиотеки и прочие инструменты лишь средства достижения указанных целей.
PM MAIL   Вверх
ZZZkoderZZZ
Дата 12.3.2013, 16:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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




Цитата(bsa @ 12.3.2013,  15:01)
Нет. Это про оформление кода

Как можно лучше оформить короткую программу, которая ничего не делает? Отступы есть, скобочки расставлены по одной схеме, комментировать здесь нечего. Очень хорошо выполнены требования 6, 7 - 
6. Большие функции - это зло
7. Не стоит делать функции с более чем 3-мя параметрами


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


Эксперт
****


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




ZZZkoderZZZ, публичная часть класса должна (рекомендуется) располагаться в начале, а приватная в конце. Фигурные скобки должны расставляться согласно одному правилу, а у тебя 3 метода расстановки, причем один необычный. Двоеточие при определении наследования следовало бы выделить пробелами.
PM   Вверх
feodorv
Дата 12.3.2013, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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




Цитата(ZZZkoderZZZ @  12.3.2013,  17:03 Найти цитируемый пост)
Как можно лучше оформить короткую программу, которая ничего не делает?

Ну пусть хоть "Hello, world!" напечатает что ли...


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


Шустрый
*


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




Цитата(bsa @ 12.3.2013,  16:22)
публичная часть класса должна (рекомендуется) располагаться в начале, а приватная в конце

Зачем писать лишнее слово? 
Разработчики С++ зачем-то по-умолчанию всё сделали private, может быть по этой причине?

Это сообщение отредактировал(а) ZZZkoderZZZ - 12.3.2013, 16:55
PM MAIL   Вверх
azesmcar
Дата 12.3.2013, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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




Цитата(ZZZkoderZZZ @  12.3.2013,  16:51 Найти цитируемый пост)
Разработчики С++ зачем-то по-умолчанию всё сделали private, может быть по этой причине?

По умолчанию ставится наименьшая степень доступности, чтобы помочь разработчикам избежать ошибок. Если разработчик забыл поместить метод в правильную секцию, то компилятор напомнит. А если вдруг не напомнит, значит методу самое место в приватной секции smile 

Цитата(bsa @  12.3.2013,  16:22 Найти цитируемый пост)
публичная часть класса должна (рекомендуется) располагаться в начале, а приватная в конце

Ну я бы сказал это вопрос вкуса, хотя лично тоже предпочитаю распологать вконце.

PM   Вверх
bsa
Дата 12.3.2013, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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




смысл положений публичных и приватных областей - в удобстве. Только разработчику класса интересна приватная часть. Пользователям класса (а их значительно больше, чем разработчиков, обычно) интересен именно публичный (или, реже, защищенный) раздел. Поэтому публичный следует располагать в начале, чтобы пользователь не искал его.
PM   Вверх
NoviceF
Дата 12.3.2013, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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




Цитата(ZZZkoderZZZ @  12.3.2013,  17:51 Найти цитируемый пост)
Разработчики С++ зачем-то по-умолчанию всё сделали private, может быть по этой причине?


хочешь паблик по-умолчанию - используй структуры.
PM MAIL   Вверх
ZZZkoderZZZ
Дата 12.3.2013, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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




Цитата(NoviceF @ 12.3.2013,  18:53)
хочешь паблик по-умолчанию - используй структуры.

В структуре надо дописывать private, а в классе - public.

Это сообщение отредактировал(а) ZZZkoderZZZ - 12.3.2013, 19:21
PM MAIL   Вверх
NoviceF
Дата 12.3.2013, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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




Цитата(ZZZkoderZZZ @  12.3.2013,  20:20 Найти цитируемый пост)
В структуре надо дописывать private, а в классе - public.

можно не дописывать, зависит от содержимого. 

Если в структуре нет членов-данных, зачастую, private секции может не быть вообще.
PM MAIL   Вверх
Arantir
Дата 12.3.2013, 20:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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




Цитата(ZZZkoderZZZ @  12.3.2013,  15:03 Найти цитируемый пост)
7. Не стоит делать функции с более чем 3-мя параметрами

Аргументы функции — это переменные, от которых зависит исходный результат функции.
Функцию F = X+Y+Z нельзя сократить до F = X+Y. Вот так же и в программировании, есть случаи, в которых критически важных аргументов много.
Например, функция отправки емейла в PHP. Для отправки корректного (а не похожего на спам) письма надо использовать как минимум 5 аргументов: отправитель, получатель, тема, тело и дополнительные заголовки. 
Можно лично для себя все это инкапсулироть в маленькую функцию, добавляя заголовки автоматически, но в корне все равно будет та же функция.
Без 5 аргументов разработчикам PHP пришлось бы создать класс, геттеры и метод отправки. Или же некие другие системные функции для изменения заголовков, вставляемых в будущее письмо. В общем получилось бы неудобно и убого.
В данном случае функция с 5-6 аргументами - это как раз самое оптимальное решение в плане удобства и реализации.
И это только один пример.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
ZZZkoderZZZ
Дата 12.3.2013, 21:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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




Arantir
любое число аргументов можно объединить в структуру и передать одним аргументом
PM MAIL   Вверх
bsa
Дата 12.3.2013, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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




Arantir, для этого существуют структуры и классы. По хорошему, для отправки письма необходимо только три параметра: адрес, тема и текст письма. Все остальное необязательно или общее для всех отправляемых писем. Именно поэтому логичнее всего объединить все это в структуру или класс.
PM   Вверх
Arantir
Дата 13.3.2013, 00:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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




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

Не приводите частное к общему.
semdmail() в PHP — это функция, которая позволяет отправить корректный мейл на любом сервере, сайте, домене и при других переменных условиях. 
Я привел ее как пример той цели, которую она выполняет, а не как подспорье для обсуждения необязательных аргументов при отправке письма. Несомненно, для конкретного сайта или даже сервера заголовки будут настроены в угоду админу, документации, целевому получателю или звездам на небе... А для отправки регистрационного письма так и вовсе получателя и текста достаточно, остальное — константы.

Я лишь привел реальный пример того, что процитированное правило далеко не является универсальным. К нему должна полагаться большая аннотация с объяснениями.

В частности, про какие именно функции идет речь. Давайте возьмем, к примеру, веб-фреймворк. В нем есть контроллер, в котором, в свою очередь, есть методы, представляющие соответствующие запросы к сайту. Так что теперь, не передавать на сайт больше трех параметров в ссылке? Или метод контроллера уже не стоит считать функцией?


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
baldina
Дата 13.3.2013, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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




Цитата(bsa @  12.3.2013,  22:02 Найти цитируемый пост)
Arantir, для этого существуют структуры и классы.

какова разница в прочтении ручного заполнения структуры? что насчет числа параметров конструктора?

другое дело, что часто
Цитата(bsa @  12.3.2013,  22:02 Найти цитируемый пост)
Все остальное необязательно или общее для всех отправляемых писем


Цитата(Arantir @  13.3.2013,  00:25 Найти цитируемый пост)
Я лишь привел реальный пример того, что процитированное правило далеко не является универсальным.

исключения бывают. правило остается
PM MAIL   Вверх
Arantir
Дата 13.3.2013, 14:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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




Слишком много исключений получается =)
Существует такое выражение — "слепое следование правилам"...

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

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


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
baldina
Дата 13.3.2013, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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




Статья про оформление кода это мнение о best practices, а не свод догматов.

И вообще, тему числа параметров функции надо рассматривать в контексте конкретной задачи. А "правило трех" должно соседствовать и перекликаться с принципом "одна задача - одна функция (класс)".

Цитата(Arantir @  13.3.2013,  14:28 Найти цитируемый пост)
Посмотрите в PHP

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

Цитата(Arantir @  13.3.2013,  14:28 Найти цитируемый пост)
 Не думаю, что вообще кто либо согласится, что создание структуры или объекта для каждого вызова подобных функций — это хорошее решение

а как же mysql vs mysqli?
впрочем php (до последней версии) громоздок для таких описаний. а вот что-то типа
Код

ajax ({
  url: 'http://...',
  type: json
});
представляется вполне изящным
PM MAIL   Вверх
Freyzer
Дата 13.3.2013, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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




А в чем собственно вопрос?


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


Рыбак без удочки
**


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




Цитата(Freyzer @  13.3.2013,  15:35 Найти цитируемый пост)
А в чем собственно вопрос?

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


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
krundetz
Дата 15.3.2013, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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




ZZZkoderZZZ, я вас разочарую OOP можно реализовать без классов

Добавлено через 43 секунды
Цитата(ZZZkoderZZZ @  12.3.2013,  10:31 Найти цитируемый пост)
Можно ли вот такую программу считать правильной ООП-программой?

нельзя

Добавлено через 5 минут и 31 секунду
Цитата(ZZZkoderZZZ @  12.3.2013,  16:51 Найти цитируемый пост)
Разработчики С++ зачем-то по-умолчанию всё сделали private

чтобы мозги у писателей чаще включались


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


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


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




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


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


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


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




Цитата(ZZZkoderZZZ @  12.3.2013,  21:10 Найти цитируемый пост)
Arantir, 
любое число аргументов можно объединить в структуру и передать одним аргументом 

Зачем все усложнять и перед каждым вызовом функции заполнять структуру? А если в числе параметров большие обьекты? Иж можно передать по const& в функцию и избежать копирования. А со структурой придется использовать указатели или написать конструктор(с тем же количеством параметров) и инициализировать константные ссылки. Так чем этот подход лучше простой передачи параметров в функцию? Так ведь и программисту будет легче понять что/где/как.


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


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


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




Цитата(Arantir @  13.3.2013,  00:25 Найти цитируемый пост)
Заставлять компьютер создавать структуру на долю секунды при каждой отправке письма только ради того, чтобы это вам угодило, — не есть айс.

ситуации разные бывают, но даже так если не будет структуры то будет что то другое в чем будет храниться отправляемая информация, структура или класс позволяет объединить эту информацию логически. Поэтому с этим аргументом согласиться не могу.
Цитата(baldina @  13.3.2013,  10:13 Найти цитируемый пост)
что насчет числа параметров конструктора?

в конструкторе должно быть ровно столько параметров, сколько требуется для инициализации, позволяющей дальше работать с экземпляром без использования сетеров.
Цитата(IKM2007 @  25.3.2013,  08:21 Найти цитируемый пост)
Зачем все усложнять и перед каждым вызовом функции заполнять структуру?

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

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


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


Идущий в даль
**


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




Цитата(krundetz @ 25.3.2013,  10:24)
На мой взгляд вопрос о том сколько должно быть аргументов у функции, метода или процедуры, есть полный бред.

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


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
IKM2007
Дата 26.3.2013, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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




Цитата(krundetz @  25.3.2013,  10:24 Найти цитируемый пост)
ситуации разные бывают, если задача большая то это позволит облегчить поддержку в дальнейшем.

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


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
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.1959 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


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

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