Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Верна ли грамматика ООП
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16113
Пользователь №: 6543
На форуме: 8 лет, 8 месяцев, 22 дня
Карма: 303

Трезвый :
6 лет, 6 месяцев, 1 день


Цитата (Another Reality @ 11.02.2017 - 18:03)
Но, вопросы ТС были вполне локаничны и недвусмысленны, как следствие - ответы такие же.
В том и дело, что нет. Человек написал свой первый класс, а его тут же макнули в SOLIDол. Причем совсем не в ту часть, в какую надо было. Если уж на то пошло, нужно было начинать с Open/Closed, хотя нет никакой уверенности, что он знает о наследовании.

Какой SOLID нафиг, это разве недвусмысленный ответ? Что там полезного для человека, который пока считает, что ООП, это
Цитата (maximka787 @ 10.02.2017 - 11:41)
наполнять объект, не задумываясь о том, как там оно внутри

ИМХО тут нужно проще. Начать с того, что если всё собирать в один класс, то он распухнет, станет сложным и неуправляемым (подробности).
Что это плохая практика, называемая "божественный объект" (подробности).
Что есть хорошая практика делить все по смежному функционалу (подробности).
(И вот только тут!) тогда будет соблюден первый принцип SOLID (подробности).

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

А что говорить о человеке, делающим первые шаги...

UPD Я вот вспомнил тут, еще в 11-том году я написал класс (один) для внутренней переписки с техподдержкой. Тогда тоже не знал про SOLID, но не в этом дело. Просто хотелось иметь автономный класс в одном файле. Так вот, он до сих пор работает и есть пить не просит. smile.gif И никакие пугалки про расширяемость, про спагетти и god-объекты, про html в классе, да и вообще все страшилки ему не указ. biggrin.gif Шесть лет отпахал, и еще отпашет, пока я не доберусь полностью переписать проект.

Это я так, к слову. А то сейчас напугаете человека, мол работать не будет, мол то-сё и капец. Все правильно написано. Для той цели, которая поставлена. А теперь дело за рефакторингом, если цель другая.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Another Reality  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 215
Пользователь №: 41606
На форуме: 1 год, 11 месяцев, 9 дней
Карма: 7




Цитата (twin @ 12.02.2017 - 09:10)
UPD Я вот вспомнил тут, еще в 11-том году я написал класс (один) для внутренней переписки с техподдержкой. Тогда тоже не знал про SOLID, но не в этом дело. Просто хотелось иметь автономный класс в одном файле. Так вот, он до сих пор работает и есть пить не просит. smile.gif И никакие пугалки про расширяемость, про спагетти и god-объекты, про html в классе, да и вообще все страшилки ему не указ. biggrin.gif Шесть лет отпахал, и еще отпашет, пока я не доберусь полностью переписать проект.

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

У человека должна была появиться куча "почему?", вот и сделали отсылку на SOLID, как на вектор для копания ответов, а не в качестве забивания в голову гвоздя догматов. smile.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16113
Пользователь №: 6543
На форуме: 8 лет, 8 месяцев, 22 дня
Карма: 303

Трезвый :
6 лет, 6 месяцев, 1 день


Цитата (Another Reality @ 12.02.2017 - 08:02)
вот и сделали отсылку на SOLID, как на вектор для копания ответов
Это примерно как человек учится ходить, а его вместо ходунков отправляют на беговую дорожку. smile.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1941
Пользователь №: 38654
На форуме: 3 года, 5 месяцев, 22 дня
Карма: 46




Из всех принципов SOLID, начинающий ООП программист должен научиться для начала первым трём SOL. Первые 3 принципа знать обязательно, потому что, во-первых, они простые, во-вторых они базовые для других концепций.


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Ребят, спасибо всем, кто принимает участие в теме. Я понимал, что создав эту тему много споров возникнет. Это как на других ресурсах, стоит заикнуться про ооп, сразу "Ты не знаешь Yii, Sympony, Zend? Ты пишешь на хреновом IDE?" иди и учи лучше бухгалтерию, а говнокод не пиши. В общем я привык. Я видел г.код и сам частенько его переделываю, матерюсь. В универе делали примитивные игрушки на Си, там как-то логичней было использовать объекты, скажу больше, там НЕ логично их НЕ использовать. А в вэбе ООП лично для меня интересно использовать только под конкретные задачи / плагины / модули, а не под всё подряд. Например, недавно скачал класс для работы с PDF. Его инициализируешь, наполняешь (много методов разных) и сохраняешь в файл. Удобно и просто мне, как кодеру. То же самое я и решил сделать на классе Фильм. Ну просто мне удобней так, чем сразу со сложного начать. Думал, наполню я объект фильм и выведу его в файл. Меня интересовала больше грамматика моего кода и всего-то)

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

.htaccess -> index.php -> парсинг url -> "роутер" напрявляют с помощью 1 файла в нужную функцию. Дальше всё, что я (или главный наш) творим, находится в рамках конкретной функции.

function page_XXXXX(){

ob_start();

//мой код

$buffer = ob_get_contents();
ob_end_clean();
return $buffer;

}


Всё строго по правилам:
1) echo без буферизации выводит данные (собранную страницу) только один раз, в конце файла index.php
2) В рамках одного php файла открывается тег "<?php" строго один раз
3) html шаблоны страниц лежат в файле шаблонов, без единого php кода. Всё.

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

Вот например список функций для работы с пользователями.
1) Функция создания и регистрация пользователя
2) Функция редактирование пользователя
3) Функция удаление пользователя
4) Функция вывод всех пользователей в массив для нужд других функций и модулей.
5) Авторизация
6) Напоминание паролей и какие-то еще...

Отличаются функции только окончанием. Префикс одинаковый.

Класс в будущем я планирую применить только в случае к Объекту "пользователь", но это после того, как научусь и пойму, что мне не хватает тех 6-ти функций и проще работать с классом.

:)
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1258
Пользователь №: 2705
На форуме: 9 лет, 10 месяцев, 18 дней
Карма: 1




Это был я smile.gif
Отредактировать не могу сообщение, жаль))


--------------------
..Работает - не трогай!
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16113
Пользователь №: 6543
На форуме: 8 лет, 8 месяцев, 22 дня
Карма: 303

Трезвый :
6 лет, 6 месяцев, 1 день


Много лишнего)
function page_XXXXX(){

ob_start();

//мой код

return ob_get_clean();

}


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1258
Пользователь №: 2705
На форуме: 9 лет, 10 месяцев, 18 дней
Карма: 1




Цитата (twin @ 13.02.2017 - 12:32)
Много лишнего)

Спасибо))


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

class User
{
private $users = array();

public function __construct()
{
$this->users = range(1,50); //временно
}

public function getAll()
{
return $this->users;
}
}


class Order
{
private $orders = array();

public function getAll()
{
$this->orders = array(
1 => array('user_id' => 1, 'comment' => 'комент1'),
2 => array('user_id' => 3, 'comment' => ''),
3 => array('user_id' => 8, 'comment' => 'комент3')
);


return $this->orders;
}
}



function func_XXXXX()
{
$u = new User(); // вот тут!
$o = new Order(); // и тут

$users = $u->getAll(); //то есть цель получить данные из класса в виде массива (то, что сейчас делается способом $users = user_list(); )
$orders = $o->getAll();

if(!is_array($users) || count($users) == 0) return;

foreach($users as $v)
{
//start
}
}


echo func_XXXXX();


--------------------
..Работает - не трогай!
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16113
Пользователь №: 6543
На форуме: 8 лет, 8 месяцев, 22 дня
Карма: 303

Трезвый :
6 лет, 6 месяцев, 1 день


Цитата (maximka787 @ 13.02.2017 - 12:46)
я могу постепенно создавать и внедрять их в мои функции, заменяя постепенно код вот таким способом.
Можешь. Это называется "композиция". Есть второй способ, сейчас более популярный - "агрегация". Вот так:

function func_XXXXX($u, $o)
{
$users = $u->getAll(); //то есть цель получить данные из класса в виде массива (то, что сейчас делается способом $users = user_list(); )
$orders = $o->getAll();

if(!is_array($users) || count($users) == 0) return;

foreach($users as $v)
{
//start
}
}

// Объекты инициализируются снаружи.
$u = new User(); // вот тут!
$o = new Order(); // и тут

echo func_XXXXX($u, $o);


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1258
Пользователь №: 2705
На форуме: 9 лет, 10 месяцев, 18 дней
Карма: 1




Цитата (twin @ 13.02.2017 - 13:35)
Есть второй способ, сейчас более популярный - "агрегация". Вот так:

Спасибо twin за мысли. А разве фишка ООП не в уходе от передаваемых параметров?


--------------------
..Работает - не трогай!
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16113
Пользователь №: 6543
На форуме: 8 лет, 8 месяцев, 22 дня
Карма: 303

Трезвый :
6 лет, 6 месяцев, 1 день


Цитата (maximka787 @ 13.02.2017 - 13:42)
А разве фишка ООП не в уходе от передаваемых параметров?
У ООП нет фишки. Это просто методология программирования, где всё представлено объектами. А дальше кто во что горазд. Народ кучкуется вокруг некоторых принципов, считая это рассово верным, попутно объявляя аппонентов говнокодерами. Хотя по сути истины никто не знает, ибо до сих пор никто внятно не может объяснить, что же такое на самом деле каноническое ООП.

Так что тебе сейчас могут нарассказать много "фишек". И про вред параметров, и про вред публичных свойств, и про вред сеттеров и бог весть что еще. Ты должен сам пройти этот путь, джедай. biggrin.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1258
Пользователь №: 2705
На форуме: 9 лет, 10 месяцев, 18 дней
Карма: 1




Цитата (twin @ 13.02.2017 - 13:51)
Ты должен сам пройти этот путь, джедай. biggrin.gif

Спасибо))
Я и начал. Попробую переписать классы и повозиться. Думаю это не последнее сообщение моё в этой теме smile.gif


--------------------
..Работает - не трогай!
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса