Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: MVC
 
 автор: sl1p   (26.09.2010 в 18:28)   письмо автору
 
 

Объясните, как например, если создаётся свой движок, можно написать модуль(компонент) так, что бы ктото смог его потом использовать где-то в своём приложении? Ведь там же используется свой уникальный метод написания, где-то какието функции и т.д..

Или это бред?:)

  Ответить  
 
 автор: neadekvat   (26.09.2010 в 18:36)   письмо автору
 
   для: sl1p   (26.09.2010 в 18:28)
 

Для других уже написано, пишите для себя.

Вы никогда не сталкивались с движками и фреймворками? Для них пишется (должна, по крайней мере) большая документация по всем доступным классам/методам/функциям.

  Ответить  
 
 автор: sl1p   (26.09.2010 в 18:37)   письмо автору
 
   для: neadekvat   (26.09.2010 в 18:36)
 

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

  Ответить  
 
 автор: neadekvat   (26.09.2010 в 18:57)   письмо автору
 
   для: sl1p   (26.09.2010 в 18:37)
 

Если речь именно про cms - то хер его знает, не работаю с ними.
Если про фреймворк - просто создаете классы с минимальной связью между собой, чтобы каждый отдельный класс можно было применять в других приложениях.
Ну, и документацию не забудьте - убивает ползать по классу, пытаясь врубиться в значения членов и методов. К тому же, нарушается постулат ООП - инкапсуляция

  Ответить  
 
 автор: ride   (26.09.2010 в 19:17)   письмо автору
 
   для: neadekvat   (26.09.2010 в 18:57)
 

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

  Ответить  
 
 автор: neadekvat   (26.09.2010 в 19:26)   письмо автору
 
   для: ride   (26.09.2010 в 19:17)
 

> это относится не к фреймворку, а к ооп.
Много вы видели/слышали серьезных фреймворков для языков, поддерживающих ООП, без использования классов?
И какой смысл говорить о переносимости функций, вы мне объясните?

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

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

  Ответить  
 
 автор: ride   (26.09.2010 в 22:39)   письмо автору
 
   для: neadekvat   (26.09.2010 в 19:26)
 

что еще за создатели классов?
апи и инкапсуляция - не одно и тоже

  Ответить  
 
 автор: neadekvat   (26.09.2010 в 22:58)   письмо автору
 
   для: ride   (26.09.2010 в 22:39)
 

Начнем издалека.
Что такое инкапсуляция?

  Ответить  
 
 автор: ride   (26.09.2010 в 23:30)   письмо автору
 
   для: neadekvat   (26.09.2010 в 22:58)
 

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

  Ответить  
 
 автор: neadekvat   (26.09.2010 в 23:42)   письмо автору
 
   для: ride   (26.09.2010 в 23:30)
 

sl1p - это вы? Если нет, тогда зачем вообще мне было отвечать?

Итак, инкапсуляция - свойство языка программирования, позволяющее объединить и защитить данные и код в объектe и скрыть реализацию объекта от пользователя (прикладного программиста). Wikipedia.org
В данном случаи я - прикладной программист. И если код незадокументирован, то мне придется лезть в исходники класса и смотреть его реализацию, чтобы понять, как им пользоваться. Таким образом нарушается принцип инкапсуляции.
Или в вашем понимании инкапсуляция - это только невозможность вмешаться во внутренние процессы объекта (я про закрытые или защещенные члены и методы)?

[поправлено модератором]

  Ответить  
 
 автор: ride   (27.09.2010 в 02:40)   письмо автору
 
   для: 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().

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

[поправлено модератором]

  Ответить  
 
 автор: neadekvat   (27.09.2010 в 07:23)   письмо автору
 
   для: ride   (27.09.2010 в 02:40)
 

Вот это уже другой разговор, согласитесь.

В общем-то, вы правы. Просто в процессе самостоятельного обучения не так, как нужно, уяснил понятие (расширил инкапсуляцию до физической невозможности увидеть реализацию). Это, однако, в процессе работы никогда мне не мешало - да и как могло бы?

[поправлено модератором]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования