Главная страница

АБОБА. Справочник по программированию на Java Методическое пособие


Скачать 242.41 Kb.
НазваниеСправочник по программированию на Java Методическое пособие
АнкорАБОБА
Дата20.02.2022
Размер242.41 Kb.
Формат файлаdocx
Имя файла12642_java_method_1.docx
ТипСправочник
#368066
страница4 из 67
1   2   3   4   5   6   7   8   9   ...   67

Абстракция


Важный элемент объектно-ориентированного программирования – абстракция.

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

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

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

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

Инкапсуляция


Инкапсуляция – механизм, который связывает код и данные, которыми он манипулирует, защищая оба эти компонента от внешнего вмешательства и злоупотреблений. Один из возможных способов представления инкапсуляции – представление в виде защитной оболочки, которая предохраняет код и данные от произвольного доступа со стороны другого кода, находящегося снаружи оболочки. Доступ к коду и данным, находящимся внутри оболочки, строго контролируются тщательно определенным интерфейсом. Чтобы провести аналогию с реальным миром, рассмотрим автоматическую коробку передач автомобиля. Она инкапсулирует сотни бит информации об автомобиле, такой как степень ускорения, крутизна поверхности, по которой совершается движение и положение рычага переключения скоростей. Пользователь (водитель) может влиять на эту сложную инкапсуляцию только одним методом: перемещая рычаг переключения скоростей. На коробку передач нельзя влиять, например, посредством индикатора поворота или дворников. Таким образом, рычаг переключения скоростей – строго определенный (а в действительности единственный) интерфейс к коробке передач. Более того, происходящее внутри коробки передач, не влияет на объекты, находящиеся вне ее. Например, переключение передач не включает фары! Поскольку функция автоматического переключения передач инкапсулирована, десятки изготовителей автомобилей могут реализовать ее каким угодно способом. Однако с точки зрения водителя все эти коробки передач работают одинаково.

Аналогичную идею можно применять к программированию. Сила инкапсулированного кода в том, что все знают, как к нему можно получить доступ, и, следовательно, могут его использовать независимо от нюансов реализации и не опасаясь неожиданных побочных эффектов. В языке Java основой инкапсуляции является класс. Хотя подробнее мы рассмотрим классы в последующих главах книги, сейчас полезно ознакомиться со следующим кратким описанием. Класс определяет структуру и поведение (данные и код), которые будут совместно использоваться набором объектов. Каждый объект данного класса содержит структуру и поведение, которые определены классом, как если бы объект был “отлит” в форме класса. Поэтому иногда объекты называют экземплярами класса. Таким образом, класс – это логическая конструкция, а объект имеет физическое воплощение.

При создании класса определяют код и данные, которые образуют этот класс. Совокупность этих элементов называют членами класса. В частности, определенные классом данные называют переменными -членами или переменными экземпляра. Код, который выполняет действия по отношению к данным, называют переменными-методами или просто методами. (То, что программисты на Java называют методом, программисты на C/C++ называют функциями.) В правильно написанных Java-программах методы определяют способы использования переменных-членов. Это означает, что поведение и интерфейс класса определяются методами, которые выполняют действия по отношению к данным его экземпляра.

Поскольку назначение класса – инкапсуляция сложной структуры программы, существуют механизмы сокрытия сложной структуры реализации внутри класса. Каждый метод или переменная в классе может быть помечена как приватная или общедоступная. Общедоступный интерфейс класса представляет все, что должны или могут знать внешние пользователи класса. Приватные методы и данные могут быть доступны только для кода, который является членом данного класса. Следовательно, любой другой код, не являющийся членом класса, не может получать доступ к приватному методу или переменной. Поскольку приватные члены класса доступны другим частям программы только посредством общедоступных методов класса, можно быть уверенным в невозможности выполнения неправомерных действий. Конечно, это означает, что общедоступный интерфейс должен быть тщательно спроектирован, открывая не слишком много нюансов внутренней работы класса.
1   2   3   4   5   6   7   8   9   ...   67


написать администратору сайта