Evgenii Legotckoi
Evgenii Legotckoi26 июня 2016 г. 12:36

User Guide #12 - Ruby - классы

Реальный мир наполнен объектами, и мы можем классифицировать их. Например, очень маленький ребёнок, вероятно, скажет "гав-гав", когда увидит собаку, независимо от породы; мы же на самом деле видим мир в терминах категорий.

В терминологии  объектно-ориентированного программирования категория объекта "dog" называется классом, и некоторые конкретные объекты принадлежащие классу называются экземплярами этого класса.

Как правило, чтобы сделать объект в Ruby или в любом другом языке, в начале необходимо определить характеристики класса, а затем создать экземпляр. Проиллюстрируем процесс, давайте определим простой класс Dog .


ruby> class Dog
    |   def speak
    |     print "Bow Wow\n"
    |   end
    | end
   nil

В Ruby определение класса является блоком кода между ключевыми словами class и end . Оператор def внутри этого региона начинает определение метода класса, которые мы обсудили в предыдущей главе, соответствующего определённому поведению объекта этого класса.

Сейчас мы имеем определённый класс Dog, и мы можем использовать его, чтобы создать собаку:

ruby> pochi = Dog.new
   #<Dog:0xbcb90>

Мы создали новый экземпляр класса Dog, и дали ему имя pochi . Метода new любого класса создаёт новый экземпляр. Поскольку pochi является Dog в соответствии с нашим определением класса, то она имеет те свойства, которые должна иметь по нашему мнению. Так как наша задумка класса была простой, то имеется лишь один трюк, который мы можем попросить pochi сделать.

ruby> pochi.speak
Bow Wow
   nil

Создание нового экземпляра класса иногда называют инстанцированием этого класса. Мы должны создать собаку до того, как попросим её что-либо сделать; Мы не можем попросить класс Dog полаять для нас.

ruby> Dog.speak
ERR: (eval):1: undefined method `speak' for Dog:class

Это не имеет никакого смысла, как если пытаться съесть концепцию бутерброда вместо самого бутерброда.

С другой стороны, если мы хотим услышать голос собаки без эмоциональной привязанности, мы можем создать (инстанцировать) эфемерную, временную собаку, которая немного пошумит прежде, чем исчезнет.

ruby> (Dog.new).speak   # or more commonly, Dog.new.speak
Bow Wow
   nil

"Подождите", скажите вы, "Это означает, что этот бедолага исчезает после этого?". Да, это правда: Если мы не дадим ему имя (как это было с pochi ), то автоматический сборщик мусора Ruby решит что это бродячая собака и безжалостно избавится от неё. На самом деле это нормально, вы же знаете, что мы можем сделать всех собак, которых захотим.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:84баллов,
  • Очки рейтинга4
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:42баллов,
  • Очки рейтинга-8
ОК

Qt - Тест 001. Сигналы и слоты

  • Результат:47баллов,
  • Очки рейтинга-6
Последние комментарии
ИМ
Игорь Максимов22 ноября 2024 г. 21:51
Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 октября 2024 г. 23:37
Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 октября 2024 г. 17:19
Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5 октября 2024 г. 16:51
Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55 июля 2024 г. 20:02
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Сейчас обсуждают на форуме
b
blinds1211 февраля 2025 г. 16:08
Why Bamboo Blinds Are the Perfect Choice for Your Home When it comes to enhancing the aesthetics and functionality of your living space, choosing the right window treatment is crucial. Bamboo blinds have emerged as a popular choice for homeowners wh…
i
imperial313011 февраля 2025 г. 15:40
How to Select the Right Carpet for Your Bedroom Aesthetic Choosing the perfect carpet for your bedroom involves more than just picking a color or pattern you like. Carpets can transform the ambiance of your space, adding warmth, comfort, and style. How…
c
carpetstore11 февраля 2025 г. 15:13
How to Choose the Perfect Red Carpet for Any Event A red carpet instantly adds elegance and sophistication to any event, making guests feel like VIPs. Whether you're hosting a corporate gala, a wedding, a movie premiere, or a private party, choo…
g
gypsumpartition11 февраля 2025 г. 12:24
Why Choose Gypsum Wall Partitions for Your Interior Design? When it comes to interior design, creating functional and aesthetically pleasing spaces is essential. One of the most versatile and practical solutions for dividing spaces is gypsum wall partiti…
Дмитрий
Дмитрий3 февраля 2025 г. 16:24
Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…

Следите за нами в социальных сетях