update
This commit is contained in:
parent
962caebbb7
commit
87bf53d076
1825 changed files with 94929 additions and 0 deletions
49
1-js/8-oop/1-about-oop/article.md
Normal file
49
1-js/8-oop/1-about-oop/article.md
Normal file
|
@ -0,0 +1,49 @@
|
|||
# Введение
|
||||
|
||||
На протяжении долгого времени в программировании применялся [процедурный подход](http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5). При этом программа состоит из функций, вызывающих друг друга.
|
||||
|
||||
Гораздо позже появилось [объектно-ориентированное программирование](http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) (ООП), которое позволяет группировать функции и данные в единой сущности -- "объекте".
|
||||
|
||||
Например, "пользователь", "меню", "компонент интерфейса"...
|
||||
|
||||
**Чтобы ООП-подход "работал", объект должен представлять собой законченную, интуитивно понятную сущность.**
|
||||
|
||||
[warn header="ООП -- это не просто объекты"]
|
||||
В JavaScript объекты часто используются просто как коллекции.
|
||||
|
||||
Например, встроенный объект [Math](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math) содержит функции (`Math.sin`, `Math.pow`, ...) и данные (константа `Math.PI`).
|
||||
|
||||
При таком использовании объектов мы не можем сказать, что "применён объектно-ориентированный подход". В частности, никакую "единую сущность" `Math` из себя не представляет.
|
||||
[/warn]
|
||||
|
||||
|
||||
Мы уже работали в ООП-стиле, создавая объекты такого вида:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
function User(name) {
|
||||
|
||||
this.sayHi = function() {
|
||||
alert("Привет, я " + name);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
var vasya = new User("Вася"); // создали пользователя
|
||||
vasya.sayHi(); // пользователь умеет говорить "Привет"
|
||||
```
|
||||
|
||||
Здесь мы видим ярко выраженную сущность -- `User` (посетитель).
|
||||
|
||||
**При объектно-ориентированной разработке мы описываем происходящее на уровне объектов, которые создаются, меняют свои свойства, взаимодействуют друг с другом и (в случае браузера) со страницей, в общем, живут.**
|
||||
|
||||
ООП -- это наука о том, как делать правильную архитектуру. У неё есть свои принципы, по ним пишут книги, к примеру:
|
||||
|
||||
<ul>
|
||||
<li><a href="http://www.ozon.ru/context/detail/id/3905587/?partner=iliakan">Объектно-ориентированный анализ и проектирование с примерами приложений.</a>
|
||||
<i>Гради Буч и др.</i>.</li>
|
||||
<li><a href="http://www.ozon.ru/context/detail/id/2457392/?partner=iliakan">Приемы объектно-ориентированного проектирования. Паттерны проектирования.</a>
|
||||
<i>Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес.</i></li>
|
||||
</ul>
|
||||
|
||||
Далее мы поговорим подробно как про ООП, так и об основных принципах, которых нужно придерживаться.
|
Loading…
Add table
Add a link
Reference in a new issue