ООП в примерах. Часть 1

от
Совершенный код    ооп, java me, java

Недавно я пообещал написать что-нибудь про ООП. Честно сказать, тема довольно щекотливая, новичку без пяти капель не разобраться. Я не знал, с чего начать, поэтому решил просто начать, а дальше уже, по отзывам, буду решать в какую сторону делать упор.

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

Пишем меню на Canvas.

Вариант 1. Меню без ООП.
NonOopMenu.java
Как видно, мы определили массив строк items для пунктов меню и числовое значение cursor для текущего выделенного элемента. При выборе пункта меню мы просто выводим Alert с текстом этого пункта, всё просто.
  - Ну и норм, без ООП справились, - подумаете вы.
  - Хорошо, а если нам надо добавить к этому меню иконки?
  - Да не вопрос, private Image[] icons;
  - А если ещё и цвет каждому элементу разный надо?
  - Пфф, private int[] itemColors; и пошел.
  - А если при выборе элемента надо различный код вызывать?
  - Не, ну пристал:
  1. switch (cursor) {
  2.     case 0: // код для первого пункта
  3.         break;
  4.     case 1: // код для второго пункта
  5.         break;
  6.     // и так далее.
  7. }
Стоп! Понятное дело, что дальше наше меню превращается в какой-то страшный агрегат с кучей полей, массивов и здоровенным набором case в switch.
Хватит это терпеть, используем ООП!


Вариант 2. Меню с ООП.
Когда в действие вступает ООП, нам приходится мыслить несколько иначе. Если раньше мы оперировали методами и переменными с массивами, то теперь в лексикон войдут слова: сущность, абстракция, класс, иерархия, интерфейс, наследование и другие пошлые философские термины. Но главное отличие, нам нужно будет думать так, как будто мы далеки от программирования.

Перевоплотимся на миг в рыженькую девушку Настю, филолог, 19 лет, оторвёмся от вконтактика и посмотрим на наш салатовый экранчик с менюшкой на английском.
Итак, перед нами экран с пунктами меню.
Вы не поверите, но мы только что выделили основные сущности: экран (наш Canvas) и пункты меню. Этот процесс называется абстрагированием.
Открыть спойлер
Класс Canvas у нас и так уже есть, поэтому давайте создадим класс для одного пункта меню. Хранить пока будем только название.
  1. public class MenuItem {
  2.  
  3.     private String name;
  4.  
  5.     public MenuItem(String name) {
  6.         this.name = name;
  7.     }
  8.  
  9.     public String getName() {
  10.         return name;
  11.     }
  12. }
И перепишем код меню с учётом этого класса: OopMenu1.java
Если сравнить этот вариант с вариантом без ООП, то можно увидеть, что кода стало больше. Это всё потому, что нам нужно достучаться до определённого свойства нашей сущности, а не тупо к элементу массива как раньше.

Уверен, пока использование ООП неубедительно, поэтому давайте добавим каждому пункту меню свой цвет.
  1. public class MenuItem {
  2.  
  3.     private String name;
  4.     private int color;
  5.  
  6.     public MenuItem(String name, int color) {
  7.         this.name = name;
  8.         this.color = color;
  9.     }
  10.  
  11.     public String getName() {
  12.         return name;
  13.     }
  14.  
  15.     public int getColor() {
  16.         return color;
  17.     }
  18. }
Теперь всё, что нам надо проделать, это выставить нужные цвета при инициализации пункта меню и добавить g.setColor(items[i].getColor()); в методе отрисовки:
  OopMenu2.java

Готовый проект
ДОМАШНЕЕ ЗАДАНИЕ. Добавьте к пунктам меню иконки.

Если какая-то часть статьи непонятна, напишите об этом в комментариях, я попробую объяснить конкретнее.
Также не лишним будет подучить теорию.
  • +16
  • views 8748