Ruby: основы ООПEvgeny SmirnovОсновы объектно-ориентированного программирования на ruby. Разбор концепции наследования.
Оригинал: http://school.smirik.ru/show/43
Основы программирования на rubyEvgeny SmirnovРассказывается об основах программирования на ruby: переменные, типы переменных, операции и пр. В конце приводятся блок-схема решения линейного уравнения.
Николай Паламарчук "Functional Programming basics for PHP developers"FwdaysFunctional Programming becomes very popular nowadays. What is it? Is it a hype or panacea? Should you deal with it as a PHP programmer? Let's find out!
Николай Паламарчук "Functional Programming basics for PHP developers"FwdaysFunctional Programming becomes very popular nowadays. What is it? Is it a hype or panacea? Should you deal with it as a PHP programmer? Let's find out!
Внедряем MOOC'и на уроке информатикиEvgeny Smirnov1. Какие бывают MOOC'и?
2. Какие платформы существуют?
3. Какие курсы полезны для учителя информатики?
4. Метрики по результатам эксперимента в 2014-2015 годах.
Инновации которые не мешаютEvgeny SmirnovПрезенетация с выступления на Арене #ИТНШ 2017: зачем нужны инновации, какого типа бывают инновации, как их искать и как их внедрять?
Порядок и хаос в Солнечной системеEvgeny SmirnovПрезентация на фестивале "Пулковский меридиан" (Смирнов Е.А.) об устройстве, порядке и хаосе в Солнечной системе. Рассматриваются представления человечества, начиная с Древних времён и до наших дней. Особое внимание уделено хаотической динамике астероидов.
Мобильные приложения в образованииEvgeny SmirnovПрезентация для семинара о том, как использовать мобильные приложения Plickers & Lumosity в образовании.
NumBuster! Почему связи между данными важнее самих данных.Evgeny SmirnovЧасто считается, что основную ценность в бизнесе представляют данные. Однако же весьма важными, а, возможно, и наиболее важными с нашей точки зрения являются связи между получаемыми данными, которые позволяют персонализировать работу пользователя и узнать его лояльность по отношению к различным вещам: работе, разным компаниям, сервисам и пр.
Доклад NumBuster! на конференции BigData Russia 2014.
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...Evgeny SmirnovМастер-класса "Образовательные и игровые платформы в помощь учителю и методисту", конференция "Информационные технологии для Новой школы", РЦОКОиИТ, 2014.
Образовательные и игровые платформы в помощь учителю и методистуEvgeny SmirnovСуществующий формат образования, подразумевающий достаточно длительные уроки, большое количество материала для запоминания и стандартную систему контрольных работ, не является оптимальным в XXI веке. Интернет и другие современные технологии, а также наличие игровых и соревновательных элементов, позволяют сделать обучение для детей более интересным, повысить его эффективность и улучшить понимание предмета. Электронные видео-материалы дают возможность повторить и закрепить пройденный в школе материал в привычной для подростка форме. Всё это позволит сделать образование более подходящим по стилю и духу для современных детей.
Функции для работы с электронными таблицамиEvgeny Smirnov
Инкапсуляция и полиморфизм в 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 = @ s i d e s [ 0 ] ∗ @ s i d e s [ 1 ]
end
end
r = R e c t a n g l e . new
r . sides = [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 ( ( @ s i d e s [ 0 ] == @ s i d e s [ 1 ] ) &&
( @ s i d e s [ 1 ] == @ s i d e s [ 2 ] ) &&
( @ s i d e s [ 2 ] == @ s i d e s [ 3 ] ) &&
( @ c o r n e r s [ 0 ] == 9 0 ) &&
( @ c o r n e r s [ 1 ] == 9 0 ) &&
( @ c o r n e r s [ 2 ] == 9 0 )
)
true
else
false
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 ?
sides = @sides . sort
i f ( s i d e s [ 2 ] ∗ ∗ 2 == ( s i d e s [ 0 ] ∗ ∗ 2 + s i d e s [ 1 ] ∗ ∗ 2 ) )
true
else
false
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: Инкапсуляция
class LinearEquation
attr_accessor : 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 )
r e t u r n " any " i f ( @b == @c )
r e t u r n " no ␣ s o l u t i o n s "
else
x = ( @c − @b ) / @a
end
end
end
Информатика 10-11 классы Инкапсуляция и полиформизм
14. Разбор задач Инкапсуляция Полиморфизм Задание References
Разбор кода
В этом коде были использованы несколько новых
конструкций. Вы можете его не понимать. Но самое
важное — он работает, а, значит, в соответствии с
принципом инкапсуляции (в данном случае — сокрытия)
вы можете его использовать.
Например, решим уравнение: 2x - 4 = 6.
Listing 5: Используем код
eq = L i n e a r E q u a t i o n . new ( 2 , −4, 6 )
p u t s 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 : f i r s t _ n a m e , : last_name , : middle_name , : j
d e f getName
@ f i r s t _ n a m e + ’ ␣ ’ + @middle_name
end
end
c l a s s Teacher < Person
end
c l a s s Student < Person
d e f 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 < P e r s o n # r e a l l y P e r s o n ???
d e f getName
’ Herr ␣ P o l i z e i ’
end
end
p = P o l i z e i . new
p u t s 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 = " T e a c h e r "
end
end
t = T e a c h e r . new
puts t . job
Информатика 10-11 классы Инкапсуляция и полиформизм
24. Разбор задач Инкапсуляция Полиморфизм Задание References
Конструктор родителя
А что делать, если мы хотим вызвать и конструктор
родителя, и текущий? Ведь если мы переопределяем с
помощью полиморфизма метод initialize, то “старый”
забывается.
Для этого в ruby есть специальный метод super.
Простой вызов этого метода вызовет конструктор
родителя.
Разумеется, в метод super можно передавать аргументы.
В предложенном на следующем слайде примере код
выведет на экран две строчки: «B», «A».
Информатика 10-11 классы Инкапсуляция и полиформизм
25. Разбор задач Инкапсуляция Полиморфизм Задание References
Код конструктора родителя
Listing 9: Конструктор родителя
class 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
class B < A
def i n i t i a l i z e
p u t s "B"
s u p e r ( "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 классы Инкапсуляция и полиформизм