[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Зачем так делают?
Страницы: 1, 2, 3, 4, 5
chee
Цитата (MiksIr @ 9.02.2014 - 23:09)
Обычно я спрашиваю, что значит "хочу"? Почему в одном случае вы хотите этого, в другом нет. В этом суть ответа, а не в хотелках.

я не совсем понимаю, как интерпретировать эти слова, можете более подробно объяснить их смысл.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
linker
MiksIr
На самом деле это вы так думаете, что это хотелка. Ответ же зависит от задачи. Один из моих вариантов - когда я хочу "разветвить" функционал потомков.

_____________
Gear Framework
Gear Framework на Github
linker
Но суть вся лежит в третьем (не по порядку мною перечисленном) принципе ООП.

_____________
Gear Framework
Gear Framework на Github
linker
Цитата (chee @ 9.02.2014 - 22:06)
linker почему тогда не использовать final ?

final наследуется и всего лишь не даёт оверрайдить метод, private метод вообще не наследуется.

_____________
Gear Framework
Gear Framework на Github
BaNru
Цитата (linker @ 9.02.2014 - 23:04)
наследование и полиморфизм

мне показалось наследование и пофигизм biggrin.gif
linker
Проблема в том, что для внешнего пользователя класса важен его интерфейс и результат, поэтому private метод или protected не играет никакой роли, private такой же гвоздь, который в случае его использования трогать весьма проблематично ибо придётся трогать другие protected и public гвозди, которые завязаны на его реализации. Беспроблемно убрать можно только те private поля и методы, которые свободны от использования. Поэтому проблемы, а вдруг сломается, надуманны относительно вообще факта существования багов в программном обеспечении.

_____________
Gear Framework
Gear Framework на Github
AllesKlar
MiksIr
Сказал, что буду читать, но не отвечать другим не обещал smile.gif

То, что вы написали (не буду цитировать, много очень) - это простая демагогия.
Вы не преподователь ВУЗа? Им присуще принимать определение только в том понятии, которое они сами понимают.

Самое лучшее на моей памяти определение это было определение рекурсии.
Цитата
Рекурсия - это Рекурсия (С) Нагорный Сергей Витальевич


Так вот, было дано четкое определение:
Цитата
Лично я использую private только тогда, когда не хочу чтобы потомки наследовали от предков, в остальных случаях public или protected.

И это единственно верное.

Если метод у меня создан исключительно для "служебных" целей, то он будет private и нечего туда совать нос пользователям моего класса.
Если я объявил метод protected, то во всех последующих версиях класса этот медод будет ОБЯЗАТЕЛЬНО возвращать результат в том же формате, в котором возвращал в своей первой версии.
Он может быть расширен с таким учетом, что предыдущее его использование не нарушит его работу.

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

_____________
[продано копирайтерам]
AllesKlar
MiksIr
Цитата
"что значит "хочу"

Хочу - это значит примерно следущее:

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

ну, как-так.


_____________
[продано копирайтерам]
linker
MiksIr
Цитата
Вот как раз в случае наследования по сути интерфейсом будет набор public+protected

Никто не спорит.
Цитата
Учите слово "рефакторинг". Начните с одноименной книжки Фаулера. Ибо то, что вы тут сказали - бред.

Это вы читайте, у вас видимо много теоретических знаний, а вот практики не очень, я имел ввиду ваши слова:
Цитата
Тогда как private позволяет вам делать что угодно - хоть полностью убрать это свойство или метод.

Ибо private-методы тоже кем-то используются, например, protected-методами, и такое вольное обращение с private неизбежно приводит ВАС к ожидаемым проблемам. Поэтому, вы можете извращаться в контексте вашего метода так, как вам захочется private он, protected или public, если интерфейс остаётся прежним и результат не изменяется, то на всё воля ваша. А если вы меняете интерфейс как здесь:
Цитата
Вы хранили в свойстве protected $css массив URL. Потом захотели хранить для каждого URL еще и media. И сделали массив вида array( URL => media )

то вы дуб и чувак, который использовал это напрямую - такой же дуб. Я понимаю, что загнать всё в private - это вы унаследовали от C++, но я тоже могу сказать, переучивайтесь, PHP не C++.

_____________
Gear Framework
Gear Framework на Github
glock18
Цитата (linker @ 10.02.2014 - 04:54)
Ибо private-методы тоже кем-то используются, например, protected-методами, и такое вольное обращение с private неизбежно приводит ВАС к ожидаемым проблемам. Поэтому, вы можете извращаться в контексте вашего метода так, как вам захочется private он, protected или public, если интерфейс остаётся прежним и результат не изменяется, то на всё воля ваша. А если вы меняете интерфейс как здесь:


Суть в том, что private метод будет использоваться в protected/public методах только класса-родителя. Если кто-то оверрайдит их, они не могут использовать private методы, а потому удаление/изменение приватных методов и свойств с предварительным рефакторингом класса-родителя совершенно безопасно
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.