SlideShare a Scribd company logo
1 of 28
Download to read offline
Разбор задач Инкапсуляция Полиморфизм Задание References
Инкапсуляция и полиформизм
Информатика
10-11 классы
5 марта 2012 г.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Разбор задач.
Задача 1. Написать класс Прямоугольник — наследник
Polygon. Определить в нём метод подсчёта площади.
Проверить корректность его работы.
Самым простым способом подсчёта площади является
перемножение длинной стороны прямоугольника на
короткую. Данные о сторонах мы имеем в свойстве sides,
поэтому задача становится весьма несложной.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Задача 1
Listing 1: Задача 1
c l a s s Polygon
. . .
end
c l a s s Rectangle < Polygon
def square
@square = @sides [ 0 ] ∗ @sides [ 1 ]
end
end
r = Rectangle . new
r . s i d e s = [10 ,2 ,10 ,2]
puts r . square
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Задача 2
Задача 2. Написать в классе Прямоугольник метод,
определяющий, является ли прямоугольник квадратом.
Метод должен возвращать булевский ответ. Проверить
корректность работы метода.
Вспомним, что булевский ответ — это истина или ложь. В
качестве правил хорошего тона булевские методы следует
оканчивать на знак вопроса.
Назовём наш метод square?.
Алгоритм: прямоугольник является квадратом, когда все
его углы и стороны равны между собой. Достаточно
проверить три угла, так как чётвёртый получается
вычитанием из 360.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Решение задачи 2
Listing 2: Задача 2
c l a s s Rectangle < Polygon
. . .
def square ?
i f ( ( @sides [ 0 ] == @sides [ 1 ] ) &&
( @sides [ 1 ] == @sides [ 2 ] ) &&
( @sides [ 2 ] == @sides [ 3 ] ) &&
( @corners [ 0 ] == 90) &&
( @corners [ 1 ] == 90) &&
( @corners [ 2 ] == 90)
)
true
e l s e
f a l s e
end
end
end
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Задача 3
Задача 3. Создать в классе Треугольник метод,
проверяющий, является ли данный треугольник
прямоугольным. Проверить корректность работы метода.
Алгоритм: треугольник является прямоугольным, если
выполнено условие теоремы Пифагора: сумма квадратов
катетов равна квадрату гипотенузы.
Для быстрого определения, какая сторона самая большая,
используем метод sort для массива сторон.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Решение задачи 3
Listing 3: Задача 3
c l a s s T r i a n g l e < Polygon
. . .
def r e c t a n g u l a r ?
s i d e s = @sides . s o r t
i f ( s i d e s [2]∗∗2 == ( s i d e s [0]∗∗ 2 + s i d e s [ 1 ] ∗ ∗ 2 ) )
true
e l s e
f a l s e
end
end
. . .
end
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Три кита ООП
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Инкапсуляция
Наследование
Полиморфизм
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Инкапсуляция
Наследование
Полиморфизм
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Инкапсуляция
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Инкапсуляция
Объектно–ориентированное программирование позволяет
использовать парадигму чёрного ящика для сокрытия
логики приложения.
Написав однажды какой-либо метод, нет смысла
впоследствии вникать в его содержимое.
Более того, другие программисты могут вообще не знать
реализацию конкретного метода, но вполне уметь его
использовать.
Такой подход в объектно-ориентированном
программировании называется инкапсуляция.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Пример с уравнением ax + b = c
Listing 4: Инкапсуляция
c l a s s LinearEquation
a t t r_ a c c e s s o r : a , : b , : c
def i n i t i a l i z e (a , b , c )
@a = a
@b = b
@c = c
end
def s o l v e
i f (@a == 0)
return "any" i f (@b == @c)
return "no␣ s o l u t i o n s "
e l s e
x = (@c − @b) / @a
end
end
end
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Разбор кода
В этом коде были использованы несколько новых
конструкций. Вы можете его не понимать. Но самое
важное — он работает, а, значит, в соответствии с
принципом инкапсуляции (в данном случае — сокрытия)
вы можете его использовать.
Например, решим уравнение: 2x - 4 = 6.
Listing 5: Используем код
eq = LinearEquation . new (2 , −4, 6)
puts eq . s o l v e
Итого: инкапсуляция позволяет использовать любой код без необходимости
понимать, как оно устроено внутри.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Конструкторы
В классе LinearEquation мы использовали неизвестный нам
ранее метод initialize.
Это — специальный метод. Он называется конструктор.
Конструктор — это метод, который вызывается при
создании нового объекта.
Конструкторы используются для автоматизации задач,
которые нужно выполнить при создании объекта.
В нашем примере мы сразу в конструктор передаём
исходные данные задачи, чтобы не “забивать” их вручную.
Для передачи данных в конструктор мы в метод new
передаём нужные параметры.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Дополнительно об инкапсуляции
Помимо уже рассмотреного, одной из возможностей
инкапсуляции является сокрытие методов.
Не вдаваясь сейчас в подробности, укажем, что
существуют три возможных видимости методов:
1 Публичный метод
2 Приватный метод
3 Защищённый метод
Идея инкапсуляции заключается в сокрытии с помощью
видимости тех методов, к которым нежелательно давать
доступ программисту. Это позволяет уменьшить
количество ошибок в программе.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Полиморфизм
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Полиморфизм
Рассмотрим класс Человек. У класса Человек есть
свойства фамилия, имя, отчество и метод обратиться по
имени.
К большинству людей в России принято обращаться по
имени–отчеству.
Однако к школьникам, обычно, обращаются по имени.
Итого, один и тот же метод для разных классов имеет
разные реализации.
Возможность похожих классов (например, наследников)
иметь различную реализацию одного и того же метода
называется полиморфизмом.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Пример полиморфизма
Listing 6: Полиморфизм
c l a s s Person
a t t r_ a c c e s s o r : first_name , : last_name , : middle_name , : j
def getName
@first_name + ’ ␣ ’ + @middle_name
end
end
c l a s s Teacher < Person
end
c l a s s Student < Person
def getName
@first_name
end
end
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Polizei
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Пример полиморфизма
Listing 7: Полиморфизм
c l a s s P o l i z e i < Person # r e a l l y Person ???
def getName
’ Herr ␣ P o l i z e i ’
end
end
p = P o l i z e i . new
puts p . getName
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Для чего нужен полиморфизм?
С помощью полиморфизма можно переопределять методы
родительского класса.
Часто имеется следующая ситуация: в 90% случаев
методы наследников полностью идентичны. В этом случае
общий метод выносят в класс–родитель, чтобы не
дублировать код.
Однако в 10% случаев есть необходимость по-другому
реализовать метод.
Чтобы не вставлять в метод проверки и условия,
используют полиморфизм, переопределяя метод только
там, где нужно.
Самостоятельное изучение. Перегрузка методов,
перегрузка / переопределение операций.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Конструкторы при полиморфизме
В созданном классе «Учитель» мы можем автоматически
проставлять свойство job.
Это проще всего сделать с помощью конструктора.
Listing 8: Конструктор в полиморфизме
c l a s s Teacher < Person
def i n i t i a l i z e
@job = " Teacher "
end
end
t = Teacher . new
puts t . job
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Конструктор родителя
А что делать, если мы хотим вызвать и конструктор
родителя, и текущий? Ведь если мы переопределяем с
помощью полиморфизма метод initialize, то “старый”
забывается.
Для этого в ruby есть специальный метод super.
Простой вызов этого метода вызовет конструктор
родителя.
Разумеется, в метод super можно передавать аргументы.
В предложенном на следующем слайде примере код
выведет на экран две строчки: «B», «A».
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Код конструктора родителя
Listing 9: Конструктор родителя
c l a s s A
def i n i t i a l i z e ( l a b e l )
puts l a b e l
end
end
c l a s s B < A
def i n i t i a l i z e
puts "B"
super ( "A" )
end
end
b = B. new
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Задание
Создать следующие классы: человек, ученик,
ученик–раздолбай, учитель, директор.
Каждый человек имеет: фамилию, имя, отчество, год
рождения. Наследование определено в соответствии со
здравым смыслом (ученик–раздолбай — наследник
ученика). Все сущности имеют методы:
1 Посчитать возраст (getAges).
2 обратиться по имени (getName) по правилу: учитель и
директор — имя + отчество, ученик — имя,
ученик-раздолбай — “Бяка” + имя.
3 булевский метод главный (head?): для директора
возвращается истина, для остальных — ложь.
ФИО и год рождения должно задаваться в конструкторе.
После реализации создать экземпляры каждого класса и
вызвать для них методы getName, getAges, head?.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Сложное задание
Реализовать класс Двумерный Вектор.
Класс имеет два свойства: x-компонента, y-компонента.
Методы класса:
1 посчитать длину (модуль)
2 прибавить к текущему вектору другой
3 отнять от текущего вектора другой
4 изменить знак вектора (-вектор)
5 умножить вектор на скаляр (вещественное число)
6 скалярно умножить на другой вектор
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
References
При подготовке данного материала использовались сайты:
http://ru.wikibooks.org/wiki/Ruby, http://rubydev.ru,
http://en.wikipedia.org, http://ruby-lang.org, http://prosa.ru,
http://guns.ru.
Все презентации доступны на http://school.smirik.ru!
Вопросы, предложения, д/з: smirik@gmail.com
Информатика 10-11 классы Инкапсуляция и полиформизм

More Related Content

What's hot

Ef3e intplus quicktest_01
Ef3e intplus quicktest_01 Ef3e intplus quicktest_01
Ef3e intplus quicktest_01 Meryem Ozyel
 
British american english vocabulary
British american english vocabularyBritish american english vocabulary
British american english vocabularyNoelia Contreras
 
NEF – PI – QUICKTEST 8 - VOCABULARY
NEF – PI – QUICKTEST 8 - VOCABULARYNEF – PI – QUICKTEST 8 - VOCABULARY
NEF – PI – QUICKTEST 8 - VOCABULARYAlicia Garcia
 
PPT on Green concrete by Pankaj Kumar
PPT on Green concrete by Pankaj KumarPPT on Green concrete by Pankaj Kumar
PPT on Green concrete by Pankaj KumarPankaj Kumar
 
NEF – PI – QUICKTEST 5 - GRAMMAR
NEF – PI – QUICKTEST 5 - GRAMMARNEF – PI – QUICKTEST 5 - GRAMMAR
NEF – PI – QUICKTEST 5 - GRAMMARAlicia Garcia
 
Future Of Transpotation
Future Of TranspotationFuture Of Transpotation
Future Of TranspotationAdnan Aslam
 
Life cycle cost analysis of overlay for an urban road in bangalore
Life cycle cost analysis of overlay for an urban road in bangaloreLife cycle cost analysis of overlay for an urban road in bangalore
Life cycle cost analysis of overlay for an urban road in bangaloreeSAT Journals
 
What are the Crash Barrier types?
What are the Crash Barrier types?What are the Crash Barrier types?
What are the Crash Barrier types?Om Wire & Wire
 
L2 Microscopic Traffic Flow Parameters
L2 Microscopic Traffic Flow ParametersL2 Microscopic Traffic Flow Parameters
L2 Microscopic Traffic Flow ParametersHossam Shafiq I
 
428096463-EVALUATING-TRANSPORTATION-ALTERNATIVES-ppt-pptx.pptx
428096463-EVALUATING-TRANSPORTATION-ALTERNATIVES-ppt-pptx.pptx428096463-EVALUATING-TRANSPORTATION-ALTERNATIVES-ppt-pptx.pptx
428096463-EVALUATING-TRANSPORTATION-ALTERNATIVES-ppt-pptx.pptxShahidRahman37
 
7-Traffic-Introduction ( Transportation and Traffic Engineering Dr. Sheriff E...
7-Traffic-Introduction ( Transportation and Traffic Engineering Dr. Sheriff E...7-Traffic-Introduction ( Transportation and Traffic Engineering Dr. Sheriff E...
7-Traffic-Introduction ( Transportation and Traffic Engineering Dr. Sheriff E...Hossam Shafiq I
 
Transportation Engineering Presentation
Transportation Engineering PresentationTransportation Engineering Presentation
Transportation Engineering PresentationSanduli Weerasekara
 
Intelligent Transportation Systems (Transportation Engineering)
Intelligent Transportation Systems (Transportation Engineering)Intelligent Transportation Systems (Transportation Engineering)
Intelligent Transportation Systems (Transportation Engineering)Hossam Shafiq I
 
Sachin gupta summer training in pwd
Sachin gupta summer training in pwdSachin gupta summer training in pwd
Sachin gupta summer training in pwdSachin gupta
 

What's hot (20)

Ef3e intplus quicktest_01
Ef3e intplus quicktest_01 Ef3e intplus quicktest_01
Ef3e intplus quicktest_01
 
British american english vocabulary
British american english vocabularyBritish american english vocabulary
British american english vocabulary
 
NEF – PI – QUICKTEST 8 - VOCABULARY
NEF – PI – QUICKTEST 8 - VOCABULARYNEF – PI – QUICKTEST 8 - VOCABULARY
NEF – PI – QUICKTEST 8 - VOCABULARY
 
Congestion Pricing
Congestion PricingCongestion Pricing
Congestion Pricing
 
Pedestrian planning and modelling
Pedestrian planning and modellingPedestrian planning and modelling
Pedestrian planning and modelling
 
PPT on Green concrete by Pankaj Kumar
PPT on Green concrete by Pankaj KumarPPT on Green concrete by Pankaj Kumar
PPT on Green concrete by Pankaj Kumar
 
NEF – PI – QUICKTEST 5 - GRAMMAR
NEF – PI – QUICKTEST 5 - GRAMMARNEF – PI – QUICKTEST 5 - GRAMMAR
NEF – PI – QUICKTEST 5 - GRAMMAR
 
Road construction
Road constructionRoad construction
Road construction
 
Future Of Transpotation
Future Of TranspotationFuture Of Transpotation
Future Of Transpotation
 
Ppt of green concrete
Ppt of green concretePpt of green concrete
Ppt of green concrete
 
concrete design with fly ash
concrete design with fly ashconcrete design with fly ash
concrete design with fly ash
 
Life cycle cost analysis of overlay for an urban road in bangalore
Life cycle cost analysis of overlay for an urban road in bangaloreLife cycle cost analysis of overlay for an urban road in bangalore
Life cycle cost analysis of overlay for an urban road in bangalore
 
What are the Crash Barrier types?
What are the Crash Barrier types?What are the Crash Barrier types?
What are the Crash Barrier types?
 
L2 Microscopic Traffic Flow Parameters
L2 Microscopic Traffic Flow ParametersL2 Microscopic Traffic Flow Parameters
L2 Microscopic Traffic Flow Parameters
 
Aging of bitumen
Aging of bitumenAging of bitumen
Aging of bitumen
 
428096463-EVALUATING-TRANSPORTATION-ALTERNATIVES-ppt-pptx.pptx
428096463-EVALUATING-TRANSPORTATION-ALTERNATIVES-ppt-pptx.pptx428096463-EVALUATING-TRANSPORTATION-ALTERNATIVES-ppt-pptx.pptx
428096463-EVALUATING-TRANSPORTATION-ALTERNATIVES-ppt-pptx.pptx
 
7-Traffic-Introduction ( Transportation and Traffic Engineering Dr. Sheriff E...
7-Traffic-Introduction ( Transportation and Traffic Engineering Dr. Sheriff E...7-Traffic-Introduction ( Transportation and Traffic Engineering Dr. Sheriff E...
7-Traffic-Introduction ( Transportation and Traffic Engineering Dr. Sheriff E...
 
Transportation Engineering Presentation
Transportation Engineering PresentationTransportation Engineering Presentation
Transportation Engineering Presentation
 
Intelligent Transportation Systems (Transportation Engineering)
Intelligent Transportation Systems (Transportation Engineering)Intelligent Transportation Systems (Transportation Engineering)
Intelligent Transportation Systems (Transportation Engineering)
 
Sachin gupta summer training in pwd
Sachin gupta summer training in pwdSachin gupta summer training in pwd
Sachin gupta summer training in pwd
 

Viewers also liked

Задачи по ООП в ruby
Задачи по ООП в rubyЗадачи по ООП в ruby
Задачи по ООП в rubyEvgeny Smirnov
 
Ruby — Паттерны программирования
Ruby — Паттерны программированияRuby — Паттерны программирования
Ruby — Паттерны программированияEvgeny Smirnov
 
Порядок и хаос в Солнечной системе
Порядок и хаос в Солнечной системеПорядок и хаос в Солнечной системе
Порядок и хаос в Солнечной системеEvgeny Smirnov
 
Инкапсуляция и полиморфизм в ruby
Инкапсуляция и полиморфизм в rubyИнкапсуляция и полиморфизм в ruby
Инкапсуляция и полиморфизм в rubyEvgeny Smirnov
 
Объектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyОбъектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyEvgeny Smirnov
 
Мобильные приложения в образовании
Мобильные приложения в образованииМобильные приложения в образовании
Мобильные приложения в образованииEvgeny Smirnov
 
Мобильные приложения в школе
Мобильные приложения в школеМобильные приложения в школе
Мобильные приложения в школеEvgeny Smirnov
 
Мобильные образовательные приложения для каждого урока
Мобильные образовательные приложения для каждого урокаМобильные образовательные приложения для каждого урока
Мобильные образовательные приложения для каждого урокаTCenter500
 

Viewers also liked (9)

Задачи по ООП в ruby
Задачи по ООП в rubyЗадачи по ООП в ruby
Задачи по ООП в ruby
 
Ruby — Паттерны программирования
Ruby — Паттерны программированияRuby — Паттерны программирования
Ruby — Паттерны программирования
 
Порядок и хаос в Солнечной системе
Порядок и хаос в Солнечной системеПорядок и хаос в Солнечной системе
Порядок и хаос в Солнечной системе
 
Инкапсуляция и полиморфизм в ruby
Инкапсуляция и полиморфизм в rubyИнкапсуляция и полиморфизм в ruby
Инкапсуляция и полиморфизм в ruby
 
Объектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyОбъектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в ruby
 
Мобильные приложения в образовании
Мобильные приложения в образованииМобильные приложения в образовании
Мобильные приложения в образовании
 
Мобильные приложения в школе
Мобильные приложения в школеМобильные приложения в школе
Мобильные приложения в школе
 
сеть как текст
сеть как текстсеть как текст
сеть как текст
 
Мобильные образовательные приложения для каждого урока
Мобильные образовательные приложения для каждого урокаМобильные образовательные приложения для каждого урока
Мобильные образовательные приложения для каждого урока
 

Similar to Ruby: инкапсуляция и полиморфизм

Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программированияITCP Community
 
Динамическое программирование на ruby
Динамическое программирование на rubyДинамическое программирование на ruby
Динамическое программирование на rubyEvgeny Smirnov
 
Алгоритмы на ruby: перебор и рекурсия
Алгоритмы на ruby: перебор и рекурсияАлгоритмы на ruby: перебор и рекурсия
Алгоритмы на ruby: перебор и рекурсияEvgeny Smirnov
 
Основы программирования на ruby
Основы программирования на rubyОсновы программирования на ruby
Основы программирования на rubyEvgeny Smirnov
 
Управляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условияУправляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условияEvgeny Smirnov
 
Chuvajlova melehina
Chuvajlova melehinaChuvajlova melehina
Chuvajlova melehinakilyakova
 
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Fwdays
 
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)ScalaNsk
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выраженияTatyanazaxarova
 
20091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture0320091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture03Computer Science Club
 
Ruby: основы ООП
Ruby: основы ООПRuby: основы ООП
Ruby: основы ООПEvgeny Smirnov
 
алгоритм циклический
алгоритм циклическийалгоритм циклический
алгоритм циклическийKhydosilova
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON
 
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.C# Desktop. Занятие 13.
C# Desktop. Занятие 13.Igor Shkulipa
 

Similar to Ruby: инкапсуляция и полиморфизм (20)

Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программирования
 
Динамическое программирование на ruby
Динамическое программирование на rubyДинамическое программирование на ruby
Динамическое программирование на ruby
 
Алгоритмы на ruby: перебор и рекурсия
Алгоритмы на ruby: перебор и рекурсияАлгоритмы на ruby: перебор и рекурсия
Алгоритмы на ruby: перебор и рекурсия
 
прак 15.docx
прак 15.docxпрак 15.docx
прак 15.docx
 
пр 15.docx
пр 15.docxпр 15.docx
пр 15.docx
 
Основы программирования на ruby
Основы программирования на rubyОсновы программирования на ruby
Основы программирования на ruby
 
Управляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условияУправляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условия
 
Chuvajlova melehina
Chuvajlova melehinaChuvajlova melehina
Chuvajlova melehina
 
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
 
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выражения
 
Введение в алгоритмы и структуры данных
Введение в алгоритмы и структуры данныхВведение в алгоритмы и структуры данных
Введение в алгоритмы и структуры данных
 
20091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture0320091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture03
 
Ruby: основы ООП
Ruby: основы ООПRuby: основы ООП
Ruby: основы ООП
 
Ruby строки
Ruby строкиRuby строки
Ruby строки
 
алгоритм циклический
алгоритм циклическийалгоритм циклический
алгоритм циклический
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
 
SOLID
SOLIDSOLID
SOLID
 
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.C# Desktop. Занятие 13.
C# Desktop. Занятие 13.
 
Рекурсия (2017)
Рекурсия (2017)Рекурсия (2017)
Рекурсия (2017)
 

More from Evgeny Smirnov

Внедряем MOOC'и на уроке информатики
Внедряем MOOC'и на уроке информатикиВнедряем MOOC'и на уроке информатики
Внедряем MOOC'и на уроке информатикиEvgeny Smirnov
 
Инновации которые не мешают
Инновации которые не мешаютИнновации которые не мешают
Инновации которые не мешаютEvgeny Smirnov
 
NumBuster! Почему связи между данными важнее самих данных.
NumBuster! Почему связи между данными важнее самих данных.NumBuster! Почему связи между данными важнее самих данных.
NumBuster! Почему связи между данными важнее самих данных.Evgeny Smirnov
 
Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2Evgeny Smirnov
 
Мастер-класс: Anki карточки
Мастер-класс: Anki карточкиМастер-класс: Anki карточки
Мастер-класс: Anki карточкиEvgeny Smirnov
 
Мастер-класс: Quiz up
Мастер-класс: Quiz upМастер-класс: Quiz up
Мастер-класс: Quiz upEvgeny Smirnov
 
Мастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox AlgebraМастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox AlgebraEvgeny Smirnov
 
Мастер-класс: начало
Мастер-класс: началоМастер-класс: начало
Мастер-класс: началоEvgeny Smirnov
 
LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)Evgeny Smirnov
 
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...Evgeny Smirnov
 
Образовательные и игровые платформы в помощь учителю и методисту
Образовательные и игровые платформы в помощь учителю и методистуОбразовательные и игровые платформы в помощь учителю и методисту
Образовательные и игровые платформы в помощь учителю и методистуEvgeny Smirnov
 
Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42Evgeny Smirnov
 
Введение в алгоритмы
Введение в алгоритмыВведение в алгоритмы
Введение в алгоритмыEvgeny Smirnov
 
Построение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицамПостроение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицамEvgeny Smirnov
 
Функции для работы с электронными таблицами
Функции для работы с электронными таблицамиФункции для работы с электронными таблицами
Функции для работы с электронными таблицамиEvgeny Smirnov
 
Электронные таблицы
Электронные таблицыЭлектронные таблицы
Электронные таблицыEvgeny Smirnov
 
LMS42 в школьном образовании
LMS42 в школьном образованииLMS42 в школьном образовании
LMS42 в школьном образованииEvgeny Smirnov
 
Импликация и логические уравнения
Импликация и логические уравненияИмпликация и логические уравнения
Импликация и логические уравненияEvgeny Smirnov
 

More from Evgeny Smirnov (20)

Внедряем MOOC'и на уроке информатики
Внедряем MOOC'и на уроке информатикиВнедряем MOOC'и на уроке информатики
Внедряем MOOC'и на уроке информатики
 
Инновации которые не мешают
Инновации которые не мешаютИнновации которые не мешают
Инновации которые не мешают
 
Newtonew Media
Newtonew MediaNewtonew Media
Newtonew Media
 
NumBuster! Почему связи между данными важнее самих данных.
NumBuster! Почему связи между данными важнее самих данных.NumBuster! Почему связи между данными важнее самих данных.
NumBuster! Почему связи между данными важнее самих данных.
 
Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2
 
Мастер-класс: Anki карточки
Мастер-класс: Anki карточкиМастер-класс: Anki карточки
Мастер-класс: Anki карточки
 
Мастер-класс: Quiz up
Мастер-класс: Quiz upМастер-класс: Quiz up
Мастер-класс: Quiz up
 
Мастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox AlgebraМастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox Algebra
 
Мастер-класс: начало
Мастер-класс: началоМастер-класс: начало
Мастер-класс: начало
 
LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)
 
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
 
Образовательные и игровые платформы в помощь учителю и методисту
Образовательные и игровые платформы в помощь учителю и методистуОбразовательные и игровые платформы в помощь учителю и методисту
Образовательные и игровые платформы в помощь учителю и методисту
 
Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42
 
Блок-схемы
Блок-схемыБлок-схемы
Блок-схемы
 
Введение в алгоритмы
Введение в алгоритмыВведение в алгоритмы
Введение в алгоритмы
 
Построение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицамПостроение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицам
 
Функции для работы с электронными таблицами
Функции для работы с электронными таблицамиФункции для работы с электронными таблицами
Функции для работы с электронными таблицами
 
Электронные таблицы
Электронные таблицыЭлектронные таблицы
Электронные таблицы
 
LMS42 в школьном образовании
LMS42 в школьном образованииLMS42 в школьном образовании
LMS42 в школьном образовании
 
Импликация и логические уравнения
Импликация и логические уравненияИмпликация и логические уравнения
Импликация и логические уравнения
 

Ruby: инкапсуляция и полиморфизм

  • 1. Разбор задач Инкапсуляция Полиморфизм Задание References Инкапсуляция и полиформизм Информатика 10-11 классы 5 марта 2012 г. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 2. Разбор задач Инкапсуляция Полиморфизм Задание References Разбор задач. Задача 1. Написать класс Прямоугольник — наследник Polygon. Определить в нём метод подсчёта площади. Проверить корректность его работы. Самым простым способом подсчёта площади является перемножение длинной стороны прямоугольника на короткую. Данные о сторонах мы имеем в свойстве sides, поэтому задача становится весьма несложной. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 3. Разбор задач Инкапсуляция Полиморфизм Задание References Задача 1 Listing 1: Задача 1 c l a s s Polygon . . . end c l a s s Rectangle < Polygon def square @square = @sides [ 0 ] ∗ @sides [ 1 ] end end r = Rectangle . new r . s i d e s = [10 ,2 ,10 ,2] puts r . square Информатика 10-11 классы Инкапсуляция и полиформизм
  • 4. Разбор задач Инкапсуляция Полиморфизм Задание References Задача 2 Задача 2. Написать в классе Прямоугольник метод, определяющий, является ли прямоугольник квадратом. Метод должен возвращать булевский ответ. Проверить корректность работы метода. Вспомним, что булевский ответ — это истина или ложь. В качестве правил хорошего тона булевские методы следует оканчивать на знак вопроса. Назовём наш метод square?. Алгоритм: прямоугольник является квадратом, когда все его углы и стороны равны между собой. Достаточно проверить три угла, так как чётвёртый получается вычитанием из 360. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 5. Разбор задач Инкапсуляция Полиморфизм Задание References Решение задачи 2 Listing 2: Задача 2 c l a s s Rectangle < Polygon . . . def square ? i f ( ( @sides [ 0 ] == @sides [ 1 ] ) && ( @sides [ 1 ] == @sides [ 2 ] ) && ( @sides [ 2 ] == @sides [ 3 ] ) && ( @corners [ 0 ] == 90) && ( @corners [ 1 ] == 90) && ( @corners [ 2 ] == 90) ) true e l s e f a l s e end end end Информатика 10-11 классы Инкапсуляция и полиформизм
  • 6. Разбор задач Инкапсуляция Полиморфизм Задание References Задача 3 Задача 3. Создать в классе Треугольник метод, проверяющий, является ли данный треугольник прямоугольным. Проверить корректность работы метода. Алгоритм: треугольник является прямоугольным, если выполнено условие теоремы Пифагора: сумма квадратов катетов равна квадрату гипотенузы. Для быстрого определения, какая сторона самая большая, используем метод sort для массива сторон. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 7. Разбор задач Инкапсуляция Полиморфизм Задание References Решение задачи 3 Listing 3: Задача 3 c l a s s T r i a n g l e < Polygon . . . def r e c t a n g u l a r ? s i d e s = @sides . s o r t i f ( s i d e s [2]∗∗2 == ( s i d e s [0]∗∗ 2 + s i d e s [ 1 ] ∗ ∗ 2 ) ) true e l s e f a l s e end end . . . end Информатика 10-11 классы Инкапсуляция и полиформизм
  • 8. Разбор задач Инкапсуляция Полиморфизм Задание References Три кита ООП Информатика 10-11 классы Инкапсуляция и полиформизм
  • 9. Разбор задач Инкапсуляция Полиморфизм Задание References Инкапсуляция Наследование Полиморфизм Информатика 10-11 классы Инкапсуляция и полиформизм
  • 10. Разбор задач Инкапсуляция Полиморфизм Задание References Инкапсуляция Наследование Полиморфизм Информатика 10-11 классы Инкапсуляция и полиформизм
  • 11. Разбор задач Инкапсуляция Полиморфизм Задание References Инкапсуляция Информатика 10-11 классы Инкапсуляция и полиформизм
  • 12. Разбор задач Инкапсуляция Полиморфизм Задание References Инкапсуляция Объектно–ориентированное программирование позволяет использовать парадигму чёрного ящика для сокрытия логики приложения. Написав однажды какой-либо метод, нет смысла впоследствии вникать в его содержимое. Более того, другие программисты могут вообще не знать реализацию конкретного метода, но вполне уметь его использовать. Такой подход в объектно-ориентированном программировании называется инкапсуляция. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 13. Разбор задач Инкапсуляция Полиморфизм Задание References Пример с уравнением ax + b = c Listing 4: Инкапсуляция c l a s s LinearEquation a t t r_ a c c e s s o r : a , : b , : c def i n i t i a l i z e (a , b , c ) @a = a @b = b @c = c end def s o l v e i f (@a == 0) return "any" i f (@b == @c) return "no␣ s o l u t i o n s " e l s e x = (@c − @b) / @a end end end Информатика 10-11 классы Инкапсуляция и полиформизм
  • 14. Разбор задач Инкапсуляция Полиморфизм Задание References Разбор кода В этом коде были использованы несколько новых конструкций. Вы можете его не понимать. Но самое важное — он работает, а, значит, в соответствии с принципом инкапсуляции (в данном случае — сокрытия) вы можете его использовать. Например, решим уравнение: 2x - 4 = 6. Listing 5: Используем код eq = LinearEquation . new (2 , −4, 6) puts eq . s o l v e Итого: инкапсуляция позволяет использовать любой код без необходимости понимать, как оно устроено внутри. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 15. Разбор задач Инкапсуляция Полиморфизм Задание References Конструкторы В классе LinearEquation мы использовали неизвестный нам ранее метод initialize. Это — специальный метод. Он называется конструктор. Конструктор — это метод, который вызывается при создании нового объекта. Конструкторы используются для автоматизации задач, которые нужно выполнить при создании объекта. В нашем примере мы сразу в конструктор передаём исходные данные задачи, чтобы не “забивать” их вручную. Для передачи данных в конструктор мы в метод new передаём нужные параметры. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 16. Разбор задач Инкапсуляция Полиморфизм Задание References Дополнительно об инкапсуляции Помимо уже рассмотреного, одной из возможностей инкапсуляции является сокрытие методов. Не вдаваясь сейчас в подробности, укажем, что существуют три возможных видимости методов: 1 Публичный метод 2 Приватный метод 3 Защищённый метод Идея инкапсуляции заключается в сокрытии с помощью видимости тех методов, к которым нежелательно давать доступ программисту. Это позволяет уменьшить количество ошибок в программе. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 17. Разбор задач Инкапсуляция Полиморфизм Задание References Полиморфизм Информатика 10-11 классы Инкапсуляция и полиформизм
  • 18. Разбор задач Инкапсуляция Полиморфизм Задание References Полиморфизм Рассмотрим класс Человек. У класса Человек есть свойства фамилия, имя, отчество и метод обратиться по имени. К большинству людей в России принято обращаться по имени–отчеству. Однако к школьникам, обычно, обращаются по имени. Итого, один и тот же метод для разных классов имеет разные реализации. Возможность похожих классов (например, наследников) иметь различную реализацию одного и того же метода называется полиморфизмом. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 19. Разбор задач Инкапсуляция Полиморфизм Задание References Пример полиморфизма Listing 6: Полиморфизм c l a s s Person a t t r_ a c c e s s o r : first_name , : last_name , : middle_name , : j def getName @first_name + ’ ␣ ’ + @middle_name end end c l a s s Teacher < Person end c l a s s Student < Person def getName @first_name end end Информатика 10-11 классы Инкапсуляция и полиформизм
  • 20. Разбор задач Инкапсуляция Полиморфизм Задание References Polizei Информатика 10-11 классы Инкапсуляция и полиформизм
  • 21. Разбор задач Инкапсуляция Полиморфизм Задание References Пример полиморфизма Listing 7: Полиморфизм c l a s s P o l i z e i < Person # r e a l l y Person ??? def getName ’ Herr ␣ P o l i z e i ’ end end p = P o l i z e i . new puts p . getName Информатика 10-11 классы Инкапсуляция и полиформизм
  • 22. Разбор задач Инкапсуляция Полиморфизм Задание References Для чего нужен полиморфизм? С помощью полиморфизма можно переопределять методы родительского класса. Часто имеется следующая ситуация: в 90% случаев методы наследников полностью идентичны. В этом случае общий метод выносят в класс–родитель, чтобы не дублировать код. Однако в 10% случаев есть необходимость по-другому реализовать метод. Чтобы не вставлять в метод проверки и условия, используют полиморфизм, переопределяя метод только там, где нужно. Самостоятельное изучение. Перегрузка методов, перегрузка / переопределение операций. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 23. Разбор задач Инкапсуляция Полиморфизм Задание References Конструкторы при полиморфизме В созданном классе «Учитель» мы можем автоматически проставлять свойство job. Это проще всего сделать с помощью конструктора. Listing 8: Конструктор в полиморфизме c l a s s Teacher < Person def i n i t i a l i z e @job = " Teacher " end end t = Teacher . new puts t . job Информатика 10-11 классы Инкапсуляция и полиформизм
  • 24. Разбор задач Инкапсуляция Полиморфизм Задание References Конструктор родителя А что делать, если мы хотим вызвать и конструктор родителя, и текущий? Ведь если мы переопределяем с помощью полиморфизма метод initialize, то “старый” забывается. Для этого в ruby есть специальный метод super. Простой вызов этого метода вызовет конструктор родителя. Разумеется, в метод super можно передавать аргументы. В предложенном на следующем слайде примере код выведет на экран две строчки: «B», «A». Информатика 10-11 классы Инкапсуляция и полиформизм
  • 25. Разбор задач Инкапсуляция Полиморфизм Задание References Код конструктора родителя Listing 9: Конструктор родителя c l a s s A def i n i t i a l i z e ( l a b e l ) puts l a b e l end end c l a s s B < A def i n i t i a l i z e puts "B" super ( "A" ) end end b = B. new Информатика 10-11 классы Инкапсуляция и полиформизм
  • 26. Разбор задач Инкапсуляция Полиморфизм Задание References Задание Создать следующие классы: человек, ученик, ученик–раздолбай, учитель, директор. Каждый человек имеет: фамилию, имя, отчество, год рождения. Наследование определено в соответствии со здравым смыслом (ученик–раздолбай — наследник ученика). Все сущности имеют методы: 1 Посчитать возраст (getAges). 2 обратиться по имени (getName) по правилу: учитель и директор — имя + отчество, ученик — имя, ученик-раздолбай — “Бяка” + имя. 3 булевский метод главный (head?): для директора возвращается истина, для остальных — ложь. ФИО и год рождения должно задаваться в конструкторе. После реализации создать экземпляры каждого класса и вызвать для них методы getName, getAges, head?. Информатика 10-11 классы Инкапсуляция и полиформизм
  • 27. Разбор задач Инкапсуляция Полиморфизм Задание References Сложное задание Реализовать класс Двумерный Вектор. Класс имеет два свойства: x-компонента, y-компонента. Методы класса: 1 посчитать длину (модуль) 2 прибавить к текущему вектору другой 3 отнять от текущего вектора другой 4 изменить знак вектора (-вектор) 5 умножить вектор на скаляр (вещественное число) 6 скалярно умножить на другой вектор Информатика 10-11 классы Инкапсуляция и полиформизм
  • 28. Разбор задач Инкапсуляция Полиморфизм Задание References References При подготовке данного материала использовались сайты: http://ru.wikibooks.org/wiki/Ruby, http://rubydev.ru, http://en.wikipedia.org, http://ruby-lang.org, http://prosa.ru, http://guns.ru. Все презентации доступны на http://school.smirik.ru! Вопросы, предложения, д/з: smirik@gmail.com Информатика 10-11 классы Инкапсуляция и полиформизм