ruby: инкапсуляция и полиморфизм
TRANSCRIPT
Разбор задач Инкапсуляция Полиморфизм Задание 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 Rec tang l e < Polygondef squa r e
@square = @s i d e s [ 0 ] ∗ @s i d e s [ 1 ]end
end
r = Rec tang l e . newr . s i d e s = [ 10 , 2 , 1 0 , 2 ]put s r . squa r e
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Задача 2
Задача 2. Написать в классе Прямоугольник метод,определяющий, является ли прямоугольник квадратом.Метод должен возвращать булевский ответ. Проверитькорректность работы метода.Вспомним, что булевский ответ — это истина или ложь. Вкачестве правил хорошего тона булевские методы следуетоканчивать на знак вопроса.Назовём наш метод square?.Алгоритм: прямоугольник является квадратом, когда всеего углы и стороны равны между собой. Достаточнопроверить три угла, так как чётвёртый получаетсявычитанием из 360.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Решение задачи 2
Listing 2: Задача 2
c l a s s Rec tang l e < Polygon. . .de f squa r e ?
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 ] ) &&( @co rne r s [ 0 ] == 90) &&( @co rne r s [ 1 ] == 90) &&( @co rne r s [ 2 ] == 90))
t r uee l s e
f a l s eend
endend
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Задача 3
Задача 3. Создать в классе Треугольник метод,проверяющий, является ли данный треугольникпрямоугольным. Проверить корректность работы метода.Алгоритм: треугольник является прямоугольным, есливыполнено условие теоремы Пифагора: сумма квадратовкатетов равна квадрату гипотенузы.Для быстрого определения, какая сторона самая большая,используем метод sort для массива сторон.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Решение задачи 3
Listing 3: Задача 3
c l a s s Tr i a n g l e < Polygon. . .def r e c t a n g u l a r ?
s i d e s = @s i d e s . s o r ti f ( s i d e s [ 2 ]∗∗2 == ( s i d e s [ 0 ]∗∗2 + s i d e s [ 1 ] ∗ ∗ 2 ) )
t r uee l s e
f a l s eend
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 L i n e a rEqua t i o na t t r_a c c e s s o r : a , : b , : cdef i n i t i a l i z e ( a , b , c )
@a = a@b = b@c = c
endde f 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 "
e l s ex = (@c − @b) / @a
endend
end
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Разбор кода
В этом коде были использованы несколько новыхконструкций. Вы можете его не понимать. Но самоеважное — он работает, а, значит, в соответствии спринципом инкапсуляции (в данном случае — сокрытия)вы можете его использовать.Например, решим уравнение: 2x - 4 = 6.
Listing 5: Используем код
eq = L i n ea rEqua t i o n . new (2 , −4, 6)put s 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 Persona t t r_a c c e s s o r : f i r s t_name , : last_name , : middle_name , : j obdef getName
@f i rst_name + ’ ␣ ’ + @middle_nameend
end
c l a s s Teacher < Personend
c l a s s Student < Personde f getName
@f i rst_nameend
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 . newput s p . getName
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Для чего нужен полиморфизм?
С помощью полиморфизма можно переопределять методыродительского класса.Часто имеется следующая ситуация: в 90% случаевметоды наследников полностью идентичны. В этом случаеобщий метод выносят в класс–родитель, чтобы недублировать код.Однако в 10% случаев есть необходимость по-другомуреализовать метод.Чтобы не вставлять в метод проверки и условия,используют полиморфизм, переопределяя метод толькотам, где нужно.Самостоятельное изучение. Перегрузка методов,перегрузка / переопределение операций.
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Конструкторы при полиморфизме
В созданном классе «Учитель» мы можем автоматическипроставлять свойство job.Это проще всего сделать с помощью конструктора.
Listing 8: Конструктор в полиморфизме
c l a s s Teacher < Persondef i n i t i a l i z e
@job = "Teacher "end
end
t = Teacher . newput s t . j ob
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Конструктор родителя
А что делать, если мы хотим вызвать и конструкторродителя, и текущий? Ведь если мы переопределяем спомощью полиморфизма метод initialize, то “старый”забывается.Для этого в ruby есть специальный метод super.Простой вызов этого метода вызовет конструкторродителя.Разумеется, в метод super можно передавать аргументы.В предложенном на следующем слайде примере кодвыведет на экран две строчки: «B», «A».
Информатика 10-11 классы Инкапсуляция и полиформизм
Разбор задач Инкапсуляция Полиморфизм Задание References
Код конструктора родителя
Listing 9: Конструктор родителя
c l a s s Adef i n i t i a l i z e ( l a b e l )
put s l a b e lend
end
c l a s s B < Adef i n i t i a l i z e
put s "B"super ( "A" )
endend
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!Вопросы, предложения, д/з: [email protected]
Информатика 10-11 классы Инкапсуляция и полиформизм