Объектно-ориентированное программирование

Вы научились делать кирпичики в виде блоков кода Ruby, прекрасно! Теперь нас ждет интересное занятие... как объединить эти кирпичики наиболее эффективным и элегантным способом, чтобы получить на выходе нужную нам программу?

Концепции ООП, о которых вы здесь прочтете, не так сильно относятся к самому Ruby, сколько вообще к любому объектно-ориентированному языку программирования. И это потому, что они, скажем так... фундаментальны. Не повторяйтесь в коде. Делайте его модульным. Классы и методы должны быть предназначены для решения только одной задачи. Интерфейс вашей программы должен содержать только необходимую информацию. Не делайте зависимости методов и классов друг от друга слишком сложными. Будьте ленивыми. Эти рекомендации потребуют некоторого времени на освоение и умение их использовать, но уже к концу этого раздела вы сделаете большой шаг к написанию высококачественного кода.

Здесь много работы, но уделите этому время! Мы начнем с рефакторинга, вспомнив материал предыдущих уроков, а затем перейдем к принципам ООП. Уроки Codecademy перемежаются с их проектами, так что вы получите шанс применить эти знания на практике. Книга "Beginning Ruby" поможет вам глубже понять материал, и вам это пригодится при создании собственных приложений.

Пункты для размышления

Постарайтесь ответить на предложенные вопросы. После выполнения задания попробуйте ответить на них ещё раз

Примечание: Перед вами опять длинный список вопросов, на которые необходимо ответить. Прочитайте их, выполните задания, а затем вернитесь к ним снова.

  • Классы и методы:

    • Что такое "implicit return"?
    • Что такое класс?
    • В каких случаях необходимо использовать класс?
    • Как создать класс в коде?
    • Что такое экземпляр класса?
    • Чем различаются стили 'CamelCase' и 'snake_case'?
    • Как создать экземпляр класса?
    • Как установить состояние созданного экземпляра?
    • Что должен содержать метод #initialize?
    • Что такое метод класса?
    • Чем отличается метод класса от метода экземпляра класса?
    • Почему уже известные вам методы, вроде #count или #sort (и подобные) являются методами экземпляра?
    • В чем разница между объявлением метода класса и метода экземпляра?
    • В чем разница между вызовом метода класса и метода экземпляра?
    • Что такое переменная экземпляра?
    • В чем разница между переменной экземпляра и обычной переменной?
    • Для чего нужны методы "getter" и "setter"?
    • В чем их различие?
    • Как сделать переменные экземпляра доступными для чтения за пределами класса? Доступными для записи? Доступными для чтения и записи?
    • Может ли класс вызывать свои собственные методы?
    • В чем разница между использованием переменной класса и константы?
    • В чем различие между классом и модулем?
    • Когда следует использовать класс, но не модуль?
    • Как работает наследование?
    • Почему полезно наследование?
    • Как можно расширить класс? В чем смысл этого?
    • Что делает #super? В чем смысл его применения?
  • Область видимости:

    • Что такое область видимости?
    • В каких частях кода вы можете использовать переменные?
    • Когда объявляется область видимости?
    • Когда методы видимы?
    • Что такое приватный метод?
    • Что такое защищенный метод?
    • В чем различие приватных и защищенных методов?
    • Что значит термин "encapsulation"?

Задания:

  1. Выполните разделы 7, 9, и 10 из курса Codecademy Ruby:

    1. Рефакторинг
    2. Проект: Фабрика рефакторинга
    3. ООП, часть I
    4. Проект: Виртуальный компьютер
    5. ООП, часть II
    6. Проект: Банкинг в Ruby
  2. Почитайте Beginning Ruby Глава 5: Экосистема Ruby в перерывах между написанием кода, чтобы лучше понять мир Ruby.

  3. Прочтите Beginning Ruby Глава 6: Классы, объекты и модули. Это будет хорошим дополнением к курсу Codecademy.

  4. Прочтите Beginning Ruby Глава 7: Проекты и библиотеки.

  5. Прочтите Beginning Ruby Глава 8: Документация и Обработка ошибок, но пропустите Тестирование (стр. 190-196).

  6. Для закрепления материала, ознакомьтесь с постами Эрика Траутмана, они помогут ответить на наши вопросы:

    1. Пояснения по Ruby: Классы
    2. Пояснения по Ruby: Наследование и Области видимости
  7. Прочтите главу об обработке ошибок для закрепления понимания работы с ошибками.

  8. Пробегите взгядом Руководство по стильному коду на Ruby, и вы поймете как сделать свой код более профессиональным.

Проверьте себя

  1. Проверьте, что вы можете выполнить эти упражнения с сайта Code Quizzes.
  2. Также проверьте свои навыки здесь.
  3. Ответьте на проверочные вопросы по практическому ООП, с которыми вы глубже поймете принципы ООП. Тут вы ознакомитесь с несколькими новыми концепциями.

Дополнительные ресурсы

Этот раздел содержит полезные ссылки на дополнительные материалы. Они не обязательны, так что расценивайте их как нечто полезное, если вы хотите поглубже погрузиться в тему

  • Если вы хотите знать еще больше о том, как создавать более лаконичные и эффективные классы, закажите книгу Практический объектно-ориентированный дизайн в Ruby от Sandi Metz.
  • Это видео от Kevin Berridge ракрывает основные темы объектно-ориентированного дизайна, во многих местах ссылаясь на книгу Sandi Metz, длительность видео около 40 минут.
  • Zetcode's Variables section
  • Теперь вы готовы ознакомиться с разделом ООП на Zetcode.
  • Прочтите второй раздел ООП на Zetcode до момента, пока речь не пойдет об исключениях.

Поделиться уроком: