ЛАБОРАТОРНАЯ РАБОТА 4
КЛАССЫ И ОБЪЕКТЫ JAVA
1. ЦЕЛЬ РАБОТЫ
Целью настоящей работы является изучение классов и объектов при программировании на JAVA.
2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Чтобы решить проблему упорядочивания программного кода, было принято решение ввести четкое разграничение данных и методов обработки этих данных. Более того, данные и соответствующие им методы объединили в одну структуру, которая в ООП называется объектом.
Такой на первый взгляд искусственный прием позволяет четко разграничить область применимости методов. Вся программа при этом имеет блочную структуру, что существенно упрощает анализ программного кода. Но даже в таком подходе было бы мало пользы, если бы каждый объект был абсолютно уникальным. Практика же такова, что каждый объект определяется некоторым общим шаблоном, который называется классом. В рамках класса задается общий шаблон, то есть структура, на основе которой затем создаются объекты. Данные, относящиеся к классу, называются полями класса, а программный код для их обработки - методами класса.
В классе описывается, какого типа данные относятся к классу (данные называются полями класса), а также то, какие методы применяются к этим данным. Затем в программе на основе того или иного класса создается экземпляр класса (объект), в котором указываются конкретные значения полей и выполняются необходимые действия над ними. Различие между классом и объектом поясним на простом примере, не имеющем никакого отношения к программированию. Поговорим о домашних животных, таких как коты и собаки. Проводя аналогию с программированием, можем определить класс Кот и класс Собака. Определение класса производится через указание полей (данных) и методов класса. Для класса Кот в качестве полей укажем имя (кличку кота) и окрас (цвет). Для класса Собака задаем поля имя (кличка собаки), окрас и породу. Помимо полей, определим методы для этих классов. По большому счету метод - это то, что может делать объект соответствующего класса (или что можно делать с объектом). Коты будут мяукать и ловить мышей, а собаки - лаять и вилять хвостом. Отсюда методами класса Кот являются мяукать и ловить мышей, а класса Собака - лаять и вилять хвостом. Таким образом, мы определили шаблоны, на основании которых впоследствии будут создаваться экземпляры классов или объекты. Разница между классом и объектом такая же, как между абстрактным понятием и реальным объектом. При создании объекта класса задаем конкретные значения для полей. Когда мы говорим о собаке вообще, как понятии, мы имеем в виду домашнее животное, у которого есть имя, окрас, порода и которое умеет лаять и вилять хвостом. Точно так же, понятие кот означает, что он мяукает и ловит мышей, к нему можно обратиться по имени, и шубка у него может быть какого-то цвета. Это - абстрактные понятия, которые соответствуют классу. А вот если речь идет о конкретном Шарике или Мурзике, то это уже объекты, экземпляры класса.
Представим, что во дворе живут три собаки и два кота: Шарик (дворняжка коричневого окраса), Джек (рыжий спаниель), Ричард (черная немецкая овчарка), Мурзик (белый и пушистый кот) и Барсик (черный кот с белой манишкой). Каждый из пяти этих друзей представляет собой объект. В то же время они относятся к двум классам: Шарик, Джек и Ричард являются объектами класса Собака, а Мурзик и Барсик - объектами класса Кот. Каждый объект в пределах класса характеризуется одинаковым набором полей и методов. Одновременно с этим каждый объект уникален. Хотя Шарик, Джек и Ричард являются объектами одного класса, они уникальны, поскольку у них разные имена, породы и окрасы. Лают и виляют хвостом они тоже по-разному. Но даже если бы мы смогли клонировать, например, Шарика и назвать пса тем же именем, у нас, несмотря на полную тождественность обеих Шариков, было бы два объекта класса Собака. Каждый из них уникален, причем не в силу каких-то физических различий, а по причине того, что один пес существует независимо от другого.
Инкапсуляция, полиморфизм и наследование
Концепция процедурного программирования могла бы быть сформулирована как система составления программного кода, действующего на данные. В этом случае приоритет остается за программным кодом. В ООП предпочтение отдается данным. Именно данные управляют доступом к программному коду. В зависимости от того, какие данные обрабатываются, определяются методы для их обработки. В объектно-ориентированных языках программирования эта концепция реализуется через механизмы инкапсуляции, полиморфизма и наследования.
Инкапсуляция позволяет объединить данные и код обработки этих данных в одно целое. В результате получаем нечто наподобие «черного ящика», в котором содержатся все необходимые данные и код. Указанным способом создаются объекты. Объект является именно той конструкцией, которая поддерживает и через которую реализуется механизм инкапсуляции.
Забегая наперед, отметим, что данные и код внутри объекта могут быть открытыми, доступными вне объекта, и закрытыми. В последнем случае доступ к данным и коду может осуществляться только в рамках объекта.
С точки зрения указанного подхода класс является базовой единицей инкапсуляции. Класс задает формат объекта, определяя тем самым новый тип данных в широком смысле этого термина, включая и методы, то есть программный код для обработки данных. Через концепцию класса данные связываются с программным кодом. В пределах класса данные представляются в виде переменных, а программный код - в виде функций (подпрограмм). Функции и переменные класса называются членами класса (соответственно, методами и полями).
Полиморфизм позволяет использовать один и тот же интерфейс для выполнения различных действий. Здесь действует принцип «Один интерфейс - много методов». Благодаря полиморфизму программы становятся менее сложными, так как для определения и выполнения однотипных действий служит единый интерфейс. Такой единый интерфейс применяется пользователем или программистом к объектам разного типа, а выбор конкретного метода для реализации соответствующей команды осуществляется компьютером в соответствии с типом объекта, для которого выполняется команда.
Важнейшим механизмом в ООП является наследование. Именно наследование позволяет усовершенствовать эволюционным способом программный код, сохраняя при этом на приемлемом уровне сложность программы. Наследование - это механизм, с помощью которого один объект может получить свойства другого объекта, что позволяет создавать на основе уже существующих объектов новые объекты с новыми свойствами, сохраняя при этом свойства старых объектов. Например, если мы решим создать новый класс Породистая собака, который от класса Собака отличается наличием поля награды-на выставках, то в общем случае пришлось бы заново создавать класс, описывая в явном виде все его поля и методы. В рамках ООП с помощью механизма наследования можно создать новый класс Породистая собака на основе уже существующего класса Собака, добавив в описании класса только новые свойства - старые наследуются автоматически. Наследование - удобный и полезный механизм.
Преимущества ООП
Применение концепции ООП позволило существенно упростить процесс написания программ и расширило возможности в составлении. сложных программных кодов. Среди основных преимуществ ООП выделим следующие.
В ООП благодаря механизму наследования можно многократно использовать созданный единожды программный код. Это позволяет существенно экономить время на создание нового кода.
Все ООП-программы достаточно хорошо структурированы, что улучшает их читабельность, да и работать с таким структурированным программным кодом намного приятнее.
ООП-программы легко редактировать и тестировать, поскольку работа может выполняться с отдельными блоками программы.
ООП-программы в случае необходимости легко дорабатываются и расширяются. Данная особенность крайне важна при создании больших проектов.
Несмотря на все это, следует четко понимать, что концепция ООП эффективна лишь в том случае, когда речь идет о больших и сложных программах. Для создания простых программ лучше использовать простые приемы.
Создание классов и объектов
Рассмотрим синтаксис описания классов в Jаvа. Описание класса начинается с ключевого слова сlаss. После этого следует имя класса и в фигурных скобках тело класса. Тело класса состоит из описания членов класса: полей и методов. По большему счету поля - это рассмотренные в предыдущих главах переменные (на данном этапе ограничимся таким определением). Таким образом, синтаксис объявления класса имеет следующий вид:
class имя_класса{
// тело класса
}
В теле класса перечисляются с указанием типа переменные - поля класса (это в том числе могут быть массивы и объекты). Что касается методов, то это - обычные функции, только описанные в рамках класса. Для тех, кто не знаком с азами программирования, заметим, что функция - это именованный фрагмент кода, к которому можно обращаться через имя из других частей программы.
Описание метода состоит из сигнатуры и тела метода. Сигнатура метода, в свою очередь, состоит из ключевого слова, которое обозначает тип возвращаемого методом результата, имени метода и списка аргументов в круглых скобках после имени метода. Аргументы разделяются запятыми, для каждого аргумента перед формальным именем аргумента указывается его тип.
Тело метода заключается в фигурные скобки и содержит код, определяющий функциональность метода. В качестве значения методы в Jаvа могут возвращать значения простых (базовых) или ссылочных типов (объекты). Если метод не возвращает результат, в качестве идентификатора типа указывается ключевое слово void. Синтаксис объявления метода имеет вид:
тип_результат имя_метода (аргументы){
// тело метода
}
Значение, возвращаемое методом, указывается после инструкции return. Другими словами, выполнение инструкции return приводит к завершению выполнения метода, и если после этой инструкции указано некоторое выражение, то значение этого выражения возвращается• в качестве результата метода. Само собой разумеется, что тип указанного после инструкции return выражения должен совпадать с типом результата, задекларированным в сигнатуре метода.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |


