Читаем Crystal Programming. Введение на основе проекта в создание эффективных, безопасных и читаемых веб-приложений и приложений CLI полностью

Нам часто необходимо предоставить переменную экземпляра как с помощью геттера, так и сеттера. Для этого у Crystal есть макрос свойств:

class Person

    property name

end

Это то же самое, что написать следующее:

class Person

    def name

        @name

    end

    

    def name=(new_name)

        @name = new_name

    end

end

Как обычно, объявления типов или начальные значения могут использоваться для очень удобного синтаксиса. Существуют и другие полезные макросы, например макрос записи, как вы увидите далее в этой главе. В следующих главах вы также узнаете, как создавать собственные макросы для автоматизации генерации кода. Далее вы узнаете об основной концепции объектно-ориентированного программирования: классах, которые наследуются от других классов.

<p>Наследование</p>

Классы могут основываться на других классах, обеспечивая более специализированное поведение. Когда класс наследует от другого, он получает все существующие методы и переменные экземпляра и может добавлять новые или перезаписывать существующие. Например, давайте расширим ранее определенный класс Person:

class Person

    property name : String

    def initialize(@name)

    end

end

class Employee < Person

    property salary = 0

end

Экземпляр Employee может находиться в любом месте, где требуется экземпляр Person, поскольку, по сути, employee – это человек:

person = Person.new("Alan")

employee = Employee.new("Helen")

employee.salary = 10000

p person.is_a? Person # => true

p employee.is_a? Person # => true

p person.is_a? Employee # => false

В этом примере родительским классом является Person, а дочерним - Employee. Для создания иерархии классов можно создать несколько классов. При наследовании от существующего класса дочерний класс может не только расширять, но и переопределять части своего родительского класса. Давайте посмотрим на это на практике:

class Employee

    def yearly_salary

        12 * @salary

    end

end

class SalesEmployee < Employee

property bonus = 0

    def yearly_salary

        12 * @salary + @bonus

    end

end

В этом примере мы видим, что ранее определенный класс Employee повторно открывается для добавления нового метода. При повторном открытии класса не следует указывать его родительский класс (в данном случае Person). Метод yearly_salary добавляется к Employee, а затем создается новый специализированный тип Employee, наследуемый от него (и, в свою очередь, также наследуемый от Person). Добавляется новое свойство и переопределяется yearly_ salary, чтобы учесть его. Переопределение затрагивает только объекты типа SalesEmployee, но не объекты типа Employee.

При наследовании от класса и переопределении метода ключевое слово super может использоваться для вызова переопределенного определения из родительского класса. yearly_salary можно было бы записать следующим образом:

def yearly_salary

    super + @bonus

end

Поскольку метод initialize используется для подготовки начального состояния объекта, ожидается, что он всегда будет выполнен раньше всего остального. Таким образом, общепринятой практикой является использование ключевого слова super для вызова конструктора родительского класса при наследовании от существующего класса.

Теперь, когда мы определили несколько классов и подклассов, мы можем воспользоваться еще одной мощной концепцией: объекты типа подкласса могут храниться в переменной, типизированной для хранения одного из его базовых классов.

<p>Полиморфизм</p>

SalesEmployee наследуется от Employee, чтобы определить более специализированный тип сотрудника, но это не меняет того факта, что сотрудник отдела продаж является сотрудником и может рассматриваться как таковой. Это называется полиморфизмом. Давайте посмотрим пример этого в действии:

employee1 = Employee.new("Helen")

employee1.salary = 5000

employee2 = SalesEmployee.new("Susan")

employee2.salary = 4000

employee2.bonus = 20000

employee3 = Employee.new("Eric")

employee3.salary = 4000

employee_list = [employee1, employee2, employee3]

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных