Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
02.05.2014
Размер:
10.24 Кб
Скачать

My home page Объектно-ориентированное программирование Две парадигмы Все программы состоят из двух элементов: кодов и данных. Более того, программы могут быть коцептуально организованы вокруг своего кода или вокруг своих данных. Существуют две парадигмы, определяющие способ построения программы. Первый подход называется процессно-ориентированной моделью. Этот подход представляет программу как ряд последовательно выполняемых операций. Процессно-ориентированную модель можно воспринимать как код, воздействующий на данные. Но, по мере увеличения размера и сложности программ, этот подход сталкивается с существенными проблемами.

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

Абстракция Центральным элементом объекно-ориентированного программирования является абстракция.

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

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

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

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

Поведение, заданное методами объекта, и свойства, определяемые данными различных типов, формируют конечную абстракцию объекта.

Объект - структура данных, содержащая поля данных различных типов и заголовки методов.

Например, синтаксис объекта anchor:

<a name="anchName">

anchText

</a>

Правила Подпрограммы, определенные в объктовом типе, называются методами объекта (methods), или правилами. Это процедуры и функции, предназначенные для выполнения определенных действий над полями объекта.

Например, синтаксис метода abs объекта Math:

Math.abs(val) // Возвращает абсолютную величину числового аргумента val.

Метод имеет доступ к полям данных объекта, не требуя передачи их ему в виде параметров.

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

Свойства объектов Инкапсуляция Инкапсуляция (encapsulation) - это механизм, связывающий вместе код и данные, которыми он манипулирует, и одновременно защищающий их от внешних помех и некорректного использования. Можно представить себе инкапсуляцию в виде защитной оболочки, предохраняющей код и данные от произвольного доступа со сороны другого кода, внешнего по отношению к этой оболочки. Доступ к коду и данным внутри оболочки жестко конролируется интерфейсом.

Основой инкапсуляции является класс. Класс (class) определяет структуру сущности, образуемой данными и кодом, и поведение этой сущности, которые после определения класса могут воплощаться во множестве объектов. Каждый объект данного класса обладает структурой и поведением, определенными классом. По этой причине объекты называются экземплярами класса (instances). Таким образом, класс - это логическая конструкция, а объект - это его физическое воплощение.

При создании класса необходимо определять код и данные, составляющие этот класс. В общем смысле эти элементы называются членами (member) класса. В частности, данные, определенные классом, называютпеременными-членами (member-variables) или переменнами экземпляра (instance variables). Код, выполняемый над этими данными, называют методами-членами (member-methodhs) или просто методами. В корректно написанной программе JavaScript методы объекта определяют, как можно использовать его переменные. Это означает, что поведение и интерфейс класса определяются методами, которые обрабатывают данные экземпляра класса.

Поскольку целью класса является инкапсуляция сложности, существуют механизмы для сокрытия сложности реализации внутри класса. Каждый метод или переменная в классе могут быть отмечены как внутренние (private) или как общедоступные (public). Интерфейс класса уровня public представляет все, что нужно или можно знать внешним пользователям класса. К методам и данным уровня private можно получить доступ только с помощью кода, который является членом этого класса. Следовательно, любой другой код, не являющийся членом этого класса, не может получить доступ к внутреннему методу или переменной. Наследование Наследование (inheritance) - это процесс, с помощью которого один объект преобретает свойства другого. Это очень важное понятие, поддерживающее концепцию иерархической классификации. Как уже упоминалось, большинство знаний систематизируются посредством иерархических (т.е. сверху вниз) классификации.

Без применения иерархий каждый объект пришлось бы определять всеми имеющимися характеристиками. Но при использовании наследования объекту нужно определить только те качества, которые делают его уникальным внутри этого класса. Он может наследовать от своего родителя общие атрибуты. В этом и состоит механизм наследования, позволяющий одному объекту быть конкретным экземпляром более общего случая.

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

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

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

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

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

Соседние файлы в папке Cправочник web-дизайнера