Объектно-ориентированное программирование
Вы научились делать кирпичики в виде блоков кода Ruby, прекрасно! Теперь нас ждет интересное занятие... как объединить эти кирпичики наиболее эффективным и элегантным способом, чтобы получить на выходе нужную нам программу?
Концепции ООП, о которых вы здесь прочтете, не так сильно относятся к самому Ruby, сколько вообще к любому объектно-ориентированному языку программирования. И это потому, что они, скажем так... фундаментальны. Не повторяйтесь в коде. Делайте его модульным. Классы и методы должны быть предназначены для решения только одной задачи. Интерфейс вашей программы должен содержать только необходимую информацию. Не делайте зависимости методов и классов друг от друга слишком сложными. Будьте ленивыми. Эти рекомендации потребуют некоторого времени на освоение и умение их использовать, но уже к концу этого раздела вы сделаете большой шаг к написанию высококачественного кода.
Здесь много работы, но уделите этому время! Мы начнем с рефакторинга, вспомнив материал предыдущих уроков, а затем перейдем к принципам ООП. Уроки Codecademy перемежаются с их проектами, так что вы получите шанс применить эти знания на практике. Книга "Beginning Ruby" поможет вам глубже понять материал, и вам это пригодится при создании собственных приложений.
Пункты для размышления
Постарайтесь ответить на предложенные вопросы. После выполнения задания попробуйте ответить на них ещё раз
Примечание: Перед вами опять длинный список вопросов, на которые необходимо ответить. Прочитайте их, выполните задания, а затем вернитесь к ним снова.
-
Классы и методы:
- Что такое "implicit return"?
- Что такое класс?
- В каких случаях необходимо использовать класс?
- Как создать класс в коде?
- Что такое экземпляр класса?
- Чем различаются стили 'CamelCase' и 'snake_case'?
- Как создать экземпляр класса?
- Как установить состояние созданного экземпляра?
- Что должен содержать метод
#initialize
? - Что такое метод класса?
- Чем отличается метод класса от метода экземпляра класса?
- Почему уже известные вам методы, вроде
#count
или#sort
(и подобные) являются методами экземпляра? - В чем разница между объявлением метода класса и метода экземпляра?
- В чем разница между вызовом метода класса и метода экземпляра?
- Что такое переменная экземпляра?
- В чем разница между переменной экземпляра и обычной переменной?
- Для чего нужны методы "getter" и "setter"?
- В чем их различие?
- Как сделать переменные экземпляра доступными для чтения за пределами класса? Доступными для записи? Доступными для чтения и записи?
- Может ли класс вызывать свои собственные методы?
- В чем разница между использованием переменной класса и константы?
- В чем различие между классом и модулем?
- Когда следует использовать класс, но не модуль?
- Как работает наследование?
- Почему полезно наследование?
- Как можно расширить класс? В чем смысл этого?
- Что делает
#super
? В чем смысл его применения?
-
Область видимости:
- Что такое область видимости?
- В каких частях кода вы можете использовать переменные?
- Когда объявляется область видимости?
- Когда методы видимы?
- Что такое приватный метод?
- Что такое защищенный метод?
- В чем различие приватных и защищенных методов?
- Что значит термин "encapsulation"?
Задания:
-
Выполните разделы 7, 9, и 10 из курса Codecademy Ruby:
- Рефакторинг
- Проект: Фабрика рефакторинга
- ООП, часть I
- Проект: Виртуальный компьютер
- ООП, часть II
- Проект: Банкинг в Ruby
-
Почитайте Beginning Ruby Глава 5:
Экосистема Ruby
в перерывах между написанием кода, чтобы лучше понять мир Ruby. -
Прочтите Beginning Ruby Глава 6:
Классы, объекты и модули
. Это будет хорошим дополнением к курсу Codecademy. -
Прочтите Beginning Ruby Глава 7:
Проекты и библиотеки.
-
Прочтите Beginning Ruby Глава 8:
Документация и Обработка ошибок
, но пропустите Тестирование (стр. 190-196). -
Для закрепления материала, ознакомьтесь с постами Эрика Траутмана, они помогут ответить на наши вопросы:
- Пояснения по Ruby: Классы
- Пояснения по Ruby: Наследование и Области видимости
-
Прочтите главу об обработке ошибок для закрепления понимания работы с ошибками.
-
Пробегите взгядом Руководство по стильному коду на Ruby, и вы поймете как сделать свой код более профессиональным.
Проверьте себя
- Проверьте, что вы можете выполнить эти упражнения с сайта Code Quizzes.
- Также проверьте свои навыки здесь.
- Ответьте на проверочные вопросы по практическому ООП, с которыми вы глубже поймете принципы ООП. Тут вы ознакомитесь с несколькими новыми концепциями.
Дополнительные ресурсы
Этот раздел содержит полезные ссылки на дополнительные материалы. Они не обязательны, так что расценивайте их как нечто полезное, если вы хотите поглубже погрузиться в тему
- Если вы хотите знать еще больше о том, как создавать более лаконичные и эффективные классы, закажите книгу Практический объектно-ориентированный дизайн в Ruby от Sandi Metz.
- Это видео от Kevin Berridge ракрывает основные темы объектно-ориентированного дизайна, во многих местах ссылаясь на книгу Sandi Metz, длительность видео около 40 минут.
- Zetcode's Variables section
- Теперь вы готовы ознакомиться с разделом ООП на Zetcode.
- Прочтите второй раздел ООП на Zetcode до момента, пока речь не пойдет об исключениях.