Отправляет email-рассылки с помощью сервиса Sendsay

Килограмм килобайтов

  Все выпуски  

Килограмм килобайтов


"Килограмм килобайтов"


Выпуск №36 Дата выхода:2008-05-11
Сайт рассылки: Рациональное программирование

Документация
 
Программирование
Java
PHP
Oracle
Операционные системы
FreeBSD
Linux
QNX

Здравствуйте, уважаемые подписчики

Предлагаю Вашему вниманию статью об объектно-ориентированном программировании на языке Java

Статья написана на основе официальной документации фирмы Sun Microsystems, Inc

v:1.0 2008.05.11

Что такое объект?

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

Объекты реального мира наделены двумя характеристиками: состояние и поведение. Собака имеет "состояние" (кличка, масть, шерсть, аппетит) и поведение (лай, виляние хвостом). Велосипед тоже имеет состояние (текущая передача, текущая скорость) и поведение (изменение передачи, изменение скорости). Чтобы начинать думать в терминах объектно-ориентированного программирования, надо выделить состояние и поведение объекта. Прямо сейчас уделите пару минут рассмотрению объектов реального мира, которые располагаются вокруг Вас. Для каждого объекта, которые Вы видите, ответьте на вопросы: "Какие возможные состояния может принимать этот объект?", "Какие действия может выполнять этот объект?". Запишите Ваши наблюдения. Вы, наверняка, заметили, что объекты различны по сложности; Ваша настольная лампа имеет два возможных состояния (включена и выключена) и два возможных действия (включить, выключить), однако настольное радио может иметь такой набор состояний: включено, выключено, текущая громкость, текущая станция; и возможные действия: включить, выключить, увеличить громкость, уменьшить громкость, искать, станцию и т.д. Кроме того, Вы можете заметить, что некоторые объекты содержат другие объекты. Все эти объекты реального мира могут быть переведены в объекты объектно-ориентированного программирования.

Программный объект

Принципиально программные объекты не отличаются от объектов реального мира: они все описываются состоянием и поведением. Объект хранит свое состояние в полях (переменные в некоторых языках программирования) и реализует свое поведение через методы (функции в некоторых языках программирования). Методы оперируют с внутренним состоянием объекта и рассматриваются как главный механизм объектно-ориентированной коммуникации. Сокрытие внутреннего состояния и требование работать с ним исключительно через методы называется инкапсуляцией. Инкапсуляция - это фундаментальный принцип объектно-ориентированного программирования.
Возьмем для примера велосипед.

Моделирование велосипеда как программного объекта

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

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

Что такое класс?

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

Ниже приведен пример класса, одна из возможных реализаций.


class Bicycle 
{
   int cadence = 0;
   int speed = 0;
   int gear = 1;

   void changeCadence(int newValue) 
  {
     cadence = newValue;
  }

  void changeGear(int newValue) 
  {
     gear = newValue;
  }

  void speedUp(int increment) 
 {
    speed = speed + increment;   
  }

  void applyBrakes(int decrement) 
 {
    speed = speed - decrement;
 }

 void printStates() 
{
     System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear);
  }
}

Синтаксис языка программирования Java покажется вам новым, однако логика класса основана на предыдущем обсуждении объектов велосипед. Поля cadence, speed и gear - это состояние объекта, а методы (changeCadence, changeGear, speedUp и т.д.) определяют взаимодействие с внешним миром.

Возможно, вы заметили, что класс Bicycle не содержит метод main. А все потому, что это не законченное приложение, это всего лишь чертеж велосипедов, который Вы можете использовать в приложении. Ответственность за использование нового объекта возлагается на другие классы вашего приложения

Ниже представлен пример класса BicycleDemo, класс создает два отдельных объекта Велосипед и вызывает их методы.


class BicycleDemo 
{
   public static void main(String[] args) 
   {
    // Создание двух объектов Велосипед.
          Bicycle bike1 = new Bicycle();
          Bicycle bike2 = new Bicycle();

          // Вызов методов этих объектов
          bike1.changeCadence(50);
          bike1.speedUp(10);
          bike1.changeGear(2);
          bike1.printStates();

          bike2.changeCadence(50);
          bike2.speedUp(10);
          bike2.changeGear(2);
          bike2.changeCadence(40);
          bike2.speedUp(10);
          bike2.changeGear(3);
          bike2.printStates();
     }
}
Вот вывод текущих состояний объектов:
cadence:50 speed:10 gear:2
cadence:40 speed:20 gear:3

Продолжение следует...


* * *

Ведущий рассылки: Петрелевич Сергей

У Вас есть вопрос? Спрашивайте
Напишите, что Вы хотите видеть в рассылке. Мне важно знать Ваше мнение.


В избранное