HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <h3>Напишем свой класс</h3>
1 <h3>Напишем свой класс</h3>
2 class Bus def initialize(params) # переменная с @ - переменная класса @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print " Vehicle: #{@type.upcase}\n Color: #{@color.upcase}\n Doors: #{@doors_number}\n Wheels number: #{@wheels_number}\n Wheels radius: #{@wheels_radius}\n " end end Bus.new(color: 'red', wheels_radius: 18)<h3>Доступ к атрибутам экземпляра класса</h3>
2 class Bus def initialize(params) # переменная с @ - переменная класса @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print " Vehicle: #{@type.upcase}\n Color: #{@color.upcase}\n Doors: #{@doors_number}\n Wheels number: #{@wheels_number}\n Wheels radius: #{@wheels_radius}\n " end end Bus.new(color: 'red', wheels_radius: 18)<h3>Доступ к атрибутам экземпляра класса</h3>
3 bus = Bus.new(color: 'red', wheels_radius: 18) # bus.color undefined method `color' bus.color = 'green' class Bus def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def color @color end def color=(color) @color = color end def print_string print " Vehicle: #{@type.upcase}\n Color: #{@color.upcase}\n Doors: #{@doors_number}\n Wheels number: #{@wheels_number}\n Wheels radius: #{@wheels_radius}\n " end end class Bus # Создание методов-геттеров attr_reader :color, :doors_number, :type, :wheels_number, :wheels_radius # Создание методов-сеттеров attr_writer :color, :doors_number, :type, :wheels_number, :wheels_radius def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print " Vehicle: #{type.upcase}\n Color: #{color.upcase}\n Doors: #{doors_number}\n Wheels number: #{wheels_number}\n Wheels radius: #{wheels_radius}\n " end end bus = Bus.new(color: 'red', wheels_radius: 18) bus.color bus.color = 'green'<h3>Методы класса</h3>
3 bus = Bus.new(color: 'red', wheels_radius: 18) # bus.color undefined method `color' bus.color = 'green' class Bus def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def color @color end def color=(color) @color = color end def print_string print " Vehicle: #{@type.upcase}\n Color: #{@color.upcase}\n Doors: #{@doors_number}\n Wheels number: #{@wheels_number}\n Wheels radius: #{@wheels_radius}\n " end end class Bus # Создание методов-геттеров attr_reader :color, :doors_number, :type, :wheels_number, :wheels_radius # Создание методов-сеттеров attr_writer :color, :doors_number, :type, :wheels_number, :wheels_radius def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print " Vehicle: #{type.upcase}\n Color: #{color.upcase}\n Doors: #{doors_number}\n Wheels number: #{wheels_number}\n Wheels radius: #{wheels_radius}\n " end end bus = Bus.new(color: 'red', wheels_radius: 18) bus.color bus.color = 'green'<h3>Методы класса</h3>
4 class Bus def self.bus? true end end Bus.bus? # true<h3>Разграничение доступа к методам</h3>
4 class Bus def self.bus? true end end Bus.bus? # true<h3>Разграничение доступа к методам</h3>
5 class Bus # Геттеры и сеттеры attr_accessor :color, :doors_number, :type, :wheels_number, :wheels_radius def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print bus_string_of(self) end def bus_string_of(bus) bus.bus_string end protected def bus_string " Vehicle: #{upcase_attribute(type)}\n Color: #{upcase_attribute(color)}\n Doors: #{upcase_attribute(doors_number)}\n Wheels number: #{upcase_attribute(wheels_number)}\n Wheels radius: #{upcase_attribute(wheels_radius)}\n " end private def upcase_attribute(attribute) attribute.to_s.upcase end end bus = Bus.new(color: 'red', wheels_radius: 18) bus.print_string bus.bus_string(bus) bus.bus_string_of(bus)<h3>Алиасы</h3>
5 class Bus # Геттеры и сеттеры attr_accessor :color, :doors_number, :type, :wheels_number, :wheels_radius def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print bus_string_of(self) end def bus_string_of(bus) bus.bus_string end protected def bus_string " Vehicle: #{upcase_attribute(type)}\n Color: #{upcase_attribute(color)}\n Doors: #{upcase_attribute(doors_number)}\n Wheels number: #{upcase_attribute(wheels_number)}\n Wheels radius: #{upcase_attribute(wheels_radius)}\n " end private def upcase_attribute(attribute) attribute.to_s.upcase end end bus = Bus.new(color: 'red', wheels_radius: 18) bus.print_string bus.bus_string(bus) bus.bus_string_of(bus)<h3>Алиасы</h3>
6 class Bus attr_accessor :color def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print bus_string_of(self) end alias to_s print_string def bus_string_of(bus) bus.bus_string end protected def bus_string " Vehicle: #{upcase_attribute(@type)}\n Color: #{upcase_attribute(@color)}\n Doors: #{upcase_attribute(@doors_number)}\n Wheels number: #{upcase_attribute(@wheels_number)}\n Wheels radius: #{upcase_attribute(@wheels_radius)}\n " end private def upcase_attribute(attribute) attribute.to_s.upcase end end bus = Bus.new(color: 'red', wheels_radius: 18) bus.to_s bus.to_string<h3>Наследование</h3>
6 class Bus attr_accessor :color def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print bus_string_of(self) end alias to_s print_string def bus_string_of(bus) bus.bus_string end protected def bus_string " Vehicle: #{upcase_attribute(@type)}\n Color: #{upcase_attribute(@color)}\n Doors: #{upcase_attribute(@doors_number)}\n Wheels number: #{upcase_attribute(@wheels_number)}\n Wheels radius: #{upcase_attribute(@wheels_radius)}\n " end private def upcase_attribute(attribute) attribute.to_s.upcase end end bus = Bus.new(color: 'red', wheels_radius: 18) bus.to_s bus.to_string<h3>Наследование</h3>
7 class Bus attr_accessor :color def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print bus_string_of(self) end def bus_string_of(bus) bus.bus_string end protected def bus_string " Vehicle: #{upcase_attribute(@type)}\n Color: #{upcase_attribute(@color)}\n Doors: #{upcase_attribute(@doors_number)}\n Wheels number: #{upcase_attribute(@wheels_number)}\n Wheels radius: #{upcase_attribute(@wheels_radius)}\n " end private def upcase_attribute(attribute) attribute.to_s.upcase end alias to_s print_string end class OfficeBus &lt; Bus attr_reader :people_place def initialize(params) super @people_place = params[:people_place] end def has_people_place? people_place end protected def bus_string " Vehicle: #{upcase_attribute(@type)}\n People place: #{@people_place ? 'YES' : 'NO'} Color: #{upcase_attribute(@color)}\n Doors: #{upcase_attribute(@doors_number)}\n Wheels number: #{upcase_attribute(@wheels_number)}\n Wheels radius: #{upcase_attribute(@wheels_radius)}\n " end end class Bus end class OfficeBus &lt; Bus end OfficeBus.new(color: 'red', wheels_radius: '18', people_place: true).to_s<h3>Модули</h3>
7 class Bus attr_accessor :color def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print bus_string_of(self) end def bus_string_of(bus) bus.bus_string end protected def bus_string " Vehicle: #{upcase_attribute(@type)}\n Color: #{upcase_attribute(@color)}\n Doors: #{upcase_attribute(@doors_number)}\n Wheels number: #{upcase_attribute(@wheels_number)}\n Wheels radius: #{upcase_attribute(@wheels_radius)}\n " end private def upcase_attribute(attribute) attribute.to_s.upcase end alias to_s print_string end class OfficeBus &lt; Bus attr_reader :people_place def initialize(params) super @people_place = params[:people_place] end def has_people_place? people_place end protected def bus_string " Vehicle: #{upcase_attribute(@type)}\n People place: #{@people_place ? 'YES' : 'NO'} Color: #{upcase_attribute(@color)}\n Doors: #{upcase_attribute(@doors_number)}\n Wheels number: #{upcase_attribute(@wheels_number)}\n Wheels radius: #{upcase_attribute(@wheels_radius)}\n " end end class Bus end class OfficeBus &lt; Bus end OfficeBus.new(color: 'red', wheels_radius: '18', people_place: true).to_s<h3>Модули</h3>
8 # include module Colorful COLORS = { black: '#000000', red: '#FF0000', white: '#FFFFFF', } def color_code(color) COLORS[color.to_sym] end end class Car def car? true end end class User # include расширяет экземпляры класса # Модуль используется как mixin # Перезаписывает методы класса, если есть с таким же именем include Colorful #... end class Bus attr_accessor :color include Colorful def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print bus_string_of(self) end def bus_string_of(bus) bus.bus_string end protected def bus_string " Vehicle: #{upcase_attribute(@type)}\n Color: #{upcase_attribute(@color)}\n Doors: #{upcase_attribute(@doors_number)}\n Wheels number: #{upcase_attribute(@wheels_number)}\n Wheels radius: #{upcase_attribute(@wheels_radius)}\n " end private def upcase_attribute(attribute) attribute.to_s.upcase end alias to_s print_string end bus = Bus.new(color: 'red', wheels_radius: '18') bus.color_code(bus.color) ## extend ## module Colorful def colorized? true end end class Bus # extend расширяет класс extend Colorful #... end Bus.colorized?<h3>Вызовы классов и модулей</h3>
8 # include module Colorful COLORS = { black: '#000000', red: '#FF0000', white: '#FFFFFF', } def color_code(color) COLORS[color.to_sym] end end class Car def car? true end end class User # include расширяет экземпляры класса # Модуль используется как mixin # Перезаписывает методы класса, если есть с таким же именем include Colorful #... end class Bus attr_accessor :color include Colorful def initialize(params) @color = params[:color] @doors_number = 4 @type = 'Bus' @wheels_number = 4 @wheels_radius = params[:wheels_radius] end def print_string print bus_string_of(self) end def bus_string_of(bus) bus.bus_string end protected def bus_string " Vehicle: #{upcase_attribute(@type)}\n Color: #{upcase_attribute(@color)}\n Doors: #{upcase_attribute(@doors_number)}\n Wheels number: #{upcase_attribute(@wheels_number)}\n Wheels radius: #{upcase_attribute(@wheels_radius)}\n " end private def upcase_attribute(attribute) attribute.to_s.upcase end alias to_s print_string end bus = Bus.new(color: 'red', wheels_radius: '18') bus.color_code(bus.color) ## extend ## module Colorful def colorized? true end end class Bus # extend расширяет класс extend Colorful #... end Bus.colorized?<h3>Вызовы классов и модулей</h3>
9 # Короткая запись - Books::HarryPotter.glasses module HarryPotter def self.magic pp 'magic' end end module Books module HarryPotter def self.glasses pp 'glasses' end end # Вызов метода из модуля Books::HarryPotter HarryPotter::glasses # Вызов метода из модуля HarryPotter (который находится глобально) ::HarryPotter::magic end # =&gt; "glasses" # =&gt; "magic"<h3>method_missing</h3>
9 # Короткая запись - Books::HarryPotter.glasses module HarryPotter def self.magic pp 'magic' end end module Books module HarryPotter def self.glasses pp 'glasses' end end # Вызов метода из модуля Books::HarryPotter HarryPotter::glasses # Вызов метода из модуля HarryPotter (который находится глобально) ::HarryPotter::magic end # =&gt; "glasses" # =&gt; "magic"<h3>method_missing</h3>
10 def method_missing(m, *args, &amp;block) #... end # Стараемся использовать отдельный файл для каждого класса # Один модуль - один файл # ruby run.rb
10 def method_missing(m, *args, &amp;block) #... end # Стараемся использовать отдельный файл для каждого класса # Один модуль - один файл # ruby run.rb