ООП в примерах. Часть 1
от aNNiMON
Недавно я пообещал написать что-нибудь про ООП. Честно сказать, тема довольно щекотливая, новичку без пяти капель не разобраться. Я не знал, с чего начать, поэтому решил просто начать, а дальше уже, по отзывам, буду решать в какую сторону делать упор.
Итак, я не буду сразу парить вас нудной информацией о том, что такое ООП, где оно используется, зачем и т.д. Сразу открываем среду разработки и пишем код!!
Пишем меню на Canvas.
Вариант 1. Меню без ООП.
NonOopMenu.java
Как видно, мы определили массив строк items для пунктов меню и числовое значение cursor для текущего выделенного элемента. При выборе пункта меню мы просто выводим Alert с текстом этого пункта, всё просто.
- Ну и норм, без ООП справились, - подумаете вы.
- Хорошо, а если нам надо добавить к этому меню иконки?
- Да не вопрос, private Image[] icons;
- А если ещё и цвет каждому элементу разный надо?
- Пфф, private int[] itemColors; и пошел.
- А если при выборе элемента надо различный код вызывать?
- Не, ну пристал:Стоп! Понятное дело, что дальше наше меню превращается в какой-то страшный агрегат с кучей полей, массивов и здоровенным набором case в switch.
Хватит это терпеть, используем ООП!
Вариант 2. Меню с ООП.
Когда в действие вступает ООП, нам приходится мыслить несколько иначе. Если раньше мы оперировали методами и переменными с массивами, то теперь в лексикон войдут слова: сущность, абстракция, класс, иерархия, интерфейс, наследование и другие пошлые философские термины. Но главное отличие, нам нужно будет думать так, как будто мы далеки от программирования.
Перевоплотимся на миг в рыженькую девушку Настю, филолог, 19 лет, оторвёмся от вконтактика и посмотрим на наш салатовый экранчик с менюшкой на английском.
Итак, перед нами экран с пунктами меню.
Вы не поверите, но мы только что выделили основные сущности: экран (наш Canvas) и пункты меню. Этот процесс называется абстрагированием.
И перепишем код меню с учётом этого класса: OopMenu1.java
Если сравнить этот вариант с вариантом без ООП, то можно увидеть, что кода стало больше. Это всё потому, что нам нужно достучаться до определённого свойства нашей сущности, а не тупо к элементу массива как раньше.
Уверен, пока использование ООП неубедительно, поэтому давайте добавим каждому пункту меню свой цвет.Теперь всё, что нам надо проделать, это выставить нужные цвета при инициализации пункта меню и добавить g.setColor(items[i].getColor()); в методе отрисовки:
OopMenu2.java
Готовый проект
ДОМАШНЕЕ ЗАДАНИЕ. Добавьте к пунктам меню иконки.
Если какая-то часть статьи непонятна, напишите об этом в комментариях, я попробую объяснить конкретнее.
Также не лишним будет подучить теорию.
Следующая статья →Итак, я не буду сразу парить вас нудной информацией о том, что такое ООП, где оно используется, зачем и т.д. Сразу открываем среду разработки и пишем код!!
Пишем меню на Canvas.
Вариант 1. Меню без ООП.
NonOopMenu.java
Как видно, мы определили массив строк items для пунктов меню и числовое значение cursor для текущего выделенного элемента. При выборе пункта меню мы просто выводим Alert с текстом этого пункта, всё просто.
- Ну и норм, без ООП справились, - подумаете вы.
- Хорошо, а если нам надо добавить к этому меню иконки?
- Да не вопрос, private Image[] icons;
- А если ещё и цвет каждому элементу разный надо?
- Пфф, private int[] itemColors; и пошел.
- А если при выборе элемента надо различный код вызывать?
- Не, ну пристал:
- switch (cursor) {
- case 0: // код для первого пункта
- break;
- case 1: // код для второго пункта
- break;
- // и так далее.
- }
Хватит это терпеть, используем ООП!
Вариант 2. Меню с ООП.
Когда в действие вступает ООП, нам приходится мыслить несколько иначе. Если раньше мы оперировали методами и переменными с массивами, то теперь в лексикон войдут слова: сущность, абстракция, класс, иерархия, интерфейс, наследование и другие пошлые философские термины. Но главное отличие, нам нужно будет думать так, как будто мы далеки от программирования.
Перевоплотимся на миг в рыженькую девушку Настю, филолог, 19 лет, оторвёмся от вконтактика и посмотрим на наш салатовый экранчик с менюшкой на английском.
Итак, перед нами экран с пунктами меню.
Вы не поверите, но мы только что выделили основные сущности: экран (наш Canvas) и пункты меню. Этот процесс называется абстрагированием.
Открыть спойлер
Класс Canvas у нас и так уже есть, поэтому давайте создадим класс для одного пункта меню. Хранить пока будем только название.- public class MenuItem {
- private String name;
- public MenuItem(String name) {
- this.name = name;
- }
- public String getName() {
- return name;
- }
- }
Если сравнить этот вариант с вариантом без ООП, то можно увидеть, что кода стало больше. Это всё потому, что нам нужно достучаться до определённого свойства нашей сущности, а не тупо к элементу массива как раньше.
Уверен, пока использование ООП неубедительно, поэтому давайте добавим каждому пункту меню свой цвет.
- public class MenuItem {
- private String name;
- private int color;
- public MenuItem(String name, int color) {
- this.name = name;
- this.color = color;
- }
- public String getName() {
- return name;
- }
- public int getColor() {
- return color;
- }
- }
OopMenu2.java
Готовый проект
ДОМАШНЕЕ ЗАДАНИЕ. Добавьте к пунктам меню иконки.
Если какая-то часть статьи непонятна, напишите об этом в комментариях, я попробую объяснить конкретнее.
Также не лишним будет подучить теорию.
Часть 2. Наследование