|
|
|
| Объясните, как например, если создаётся свой движок, можно написать модуль(компонент) так, что бы ктото смог его потом использовать где-то в своём приложении? Ведь там же используется свой уникальный метод написания, где-то какието функции и т.д..
Или это бред?:) | |
|
|
|
|
|
|
|
для: sl1p
(26.09.2010 в 18:28)
| | Для других уже написано, пишите для себя.
Вы никогда не сталкивались с движками и фреймворками? Для них пишется (должна, по крайней мере) большая документация по всем доступным классам/методам/функциям. | |
|
|
|
|
|
|
|
для: neadekvat
(26.09.2010 в 18:36)
| | да нет я понимаю что уже есть, но просто для интереса, как всё таки можно написать приложение под свою кмс чтобы его смогли без проблем использовать в другой кмс? | |
|
|
|
|
|
|
|
для: sl1p
(26.09.2010 в 18:37)
| | Если речь именно про cms - то хер его знает, не работаю с ними.
Если про фреймворк - просто создаете классы с минимальной связью между собой, чтобы каждый отдельный класс можно было применять в других приложениях.
Ну, и документацию не забудьте - убивает ползать по классу, пытаясь врубиться в значения членов и методов. К тому же, нарушается постулат ООП - инкапсуляция | |
|
|
|
|
|
|
|
для: neadekvat
(26.09.2010 в 18:57)
| | >>просто создаете классы с минимальной связью между собой
это относится не к фреймворку, а к ооп.
>>чтобы каждый отдельный класс можно было применять в других приложениях.
я бы сказал чтобы этот класс безболезненно можно было заменить другим
а про связь документации и инкапсуляции ничего не понял | |
|
|
|
|
|
|
|
для: ride
(26.09.2010 в 19:17)
| | > это относится не к фреймворку, а к ооп.
Много вы видели/слышали серьезных фреймворков для языков, поддерживающих ООП, без использования классов?
И какой смысл говорить о переносимости функций, вы мне объясните?
> я бы сказал чтобы этот класс безболезненно можно было заменить другим
Вы считаете, что все создатели классов используют одни и те же имена членов и методов?
> а про связь документации и инкапсуляции ничего не понял
Если нет документации по классу, то мне необходимо увидеть реализации класса, чтобы понять, как им пользоваться. А это прямое нарушение инкапсуляции. По-моему, это предельно понятно, и что вы там не поняли... | |
|
|
|
|
|
|
|
для: neadekvat
(26.09.2010 в 19:26)
| | что еще за создатели классов?
апи и инкапсуляция - не одно и тоже | |
|
|
|
|
|
|
|
для: ride
(26.09.2010 в 22:39)
| | Начнем издалека.
Что такое инкапсуляция? | |
|
|
|
|
|
|
|
для: neadekvat
(26.09.2010 в 22:58)
| | вы не настолько компетентны, чтобы я отвечал на ваши вопросы.
идите читайте литературу. и больше вслух никогда не говорите "мне необходимо увидеть реализации класса, чтобы понять, как им пользоваться. А это прямое нарушение инкапсуляции." | |
|
|
|
|
|
|
|
для: ride
(26.09.2010 в 23:30)
| | sl1p - это вы? Если нет, тогда зачем вообще мне было отвечать?
Итак, инкапсуляция - свойство языка программирования, позволяющее объединить и защитить данные и код в объектe и скрыть реализацию объекта от пользователя (прикладного программиста). Wikipedia.org
В данном случаи я - прикладной программист. И если код незадокументирован, то мне придется лезть в исходники класса и смотреть его реализацию, чтобы понять, как им пользоваться. Таким образом нарушается принцип инкапсуляции.
Или в вашем понимании инкапсуляция - это только невозможность вмешаться во внутренние процессы объекта (я про закрытые или защещенные члены и методы)?
[поправлено модератором] | |
|
|
|
|
|
|
|
для: neadekvat
(26.09.2010 в 23:42)
| | Инкапсуляция - это просто сокрытие данных и функциональности от клиентского кода.
На самом простейшем уровне мы инкапсулируем данные, объявляя свойства как private или protected.
Скрывая свойство от клиентского кода, мы вводим в действие интерфейс и тем самым
предотвращаем случайное повреждение данных.
class Good
{
private $_price;
public function getPrice()
{
return $this->_price;
}
}
|
Клиент будет вызывать метод getPrice(). а как он реализован(возвращает значение поля,
возможно, с учетом скидки) - клиент не знает.
Реализация от нас скрыта, доступен только интерфейс.
Полиморфизм показывает другой вид инкапсуляции.
Размещая различные реализации за общим интерфейсом, мы скрываем работающий в их основе механизм от клиентского кода. (стратегия, адаптер)
Значение имеет только интерфейс. а не механизм, работающий в его основе.
class Good
{
/**
* @var IPricingStrategy
*/
protected $_pricingStrategy;
public function getPrice()
{
return $this->_pricingStrategy->getPrice();
}
}
|
$_pricingStrategy - это объект, реализующий интерфейс IPricingStrategy.
Какой именно объект - мы не знаем. Знаем лишь, что у него будет метод getPrice().
Ваш вариант не имеет ничего общего с инкапсуляцией.
Документация кода - это лишь правило хорошего тона и не больше.
Оно помогает разработчику понять что творится в коде.
Как, например, я выше указал тип переменной.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: ride
(27.09.2010 в 02:40)
| | Вот это уже другой разговор, согласитесь.
В общем-то, вы правы. Просто в процессе самостоятельного обучения не так, как нужно, уяснил понятие (расширил инкапсуляцию до физической невозможности увидеть реализацию). Это, однако, в процессе работы никогда мне не мешало - да и как могло бы?
[поправлено модератором] | |
|
|
|