SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
Разбор задач    Инкапсуляция              Полиморфизм           Задание    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 = @ 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 классы        Инкапсуляция и полиформизм
Разбор задач          Инкапсуляция              Полиморфизм           Задание    References



Задача 2


               Задача 2. Написать в классе Прямоугольник метод,
               определяющий, является ли прямоугольник квадратом.
               Метод должен возвращать булевский ответ. Проверить
               корректность работы метода.
               Вспомним, что булевский ответ — это истина или ложь. В
               качестве правил хорошего тона булевские методы следует
               оканчивать на знак вопроса.
               Назовём наш метод square?.
               Алгоритм: прямоугольник является квадратом, когда все
               его углы и стороны равны между собой. Достаточно
               проверить три угла, так как чётвёртый получается
               вычитанием из 360.


                     Информатика 10-11 классы       Инкапсуляция и полиформизм
Разбор задач           Инкапсуляция             Полиморфизм             Задание   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 классы       Инкапсуляция и полиформизм
Разбор задач          Инкапсуляция              Полиморфизм           Задание    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 ?
                       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 классы         Инкапсуляция и полиформизм
Разбор задач    Инкапсуляция              Полиморфизм           Задание    References




                     Три кита ООП




               Информатика 10-11 классы       Инкапсуляция и полиформизм
Разбор задач      Инкапсуляция              Полиморфизм           Задание    References




               Инкапсуляция
               Наследование
               Полиморфизм


                 Информатика 10-11 классы       Инкапсуляция и полиформизм
Разбор задач      Инкапсуляция              Полиморфизм           Задание    References




               Инкапсуляция
               Наследование
               Полиморфизм


                 Информатика 10-11 классы       Инкапсуляция и полиформизм
Разбор задач    Инкапсуляция              Полиморфизм           Задание    References




                      Инкапсуляция




               Информатика 10-11 классы       Инкапсуляция и полиформизм
Разбор задач          Инкапсуляция              Полиморфизм           Задание    References



Инкапсуляция


               Объектно–ориентированное программирование позволяет
               использовать парадигму чёрного ящика для сокрытия
               логики приложения.
               Написав однажды какой-либо метод, нет смысла
               впоследствии вникать в его содержимое.
               Более того, другие программисты могут вообще не знать
               реализацию конкретного метода, но вполне уметь его
               использовать.
               Такой подход в объектно-ориентированном
               программировании называется инкапсуляция.



                     Информатика 10-11 классы       Инкапсуляция и полиформизм
Разбор задач            Инкапсуляция              Полиморфизм           Задание    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 классы       Инкапсуляция и полиформизм
Разбор задач              Инкапсуляция             Полиморфизм           Задание    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 классы       Инкапсуляция и полиформизм
Разбор задач          Инкапсуляция              Полиморфизм           Задание    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 : 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 классы       Инкапсуляция и полиформизм
Разбор задач    Инкапсуляция              Полиморфизм           Задание    References



Polizei




               Информатика 10-11 классы       Инкапсуляция и полиформизм
Разбор задач              Инкапсуляция              Полиморфизм             Задание   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 классы       Инкапсуляция и полиформизм
Разбор задач          Инкапсуляция              Полиморфизм           Задание    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 = " T e a c h e r "
                   end
               end

               t = T e a c h e r . new
               puts t . job



                        Информатика 10-11 классы       Инкапсуляция и полиформизм
Разбор задач          Инкапсуляция              Полиморфизм           Задание    References



Конструктор родителя


               А что делать, если мы хотим вызвать и конструктор
               родителя, и текущий? Ведь если мы переопределяем с
               помощью полиморфизма метод initialize, то “старый”
               забывается.
               Для этого в ruby есть специальный метод super.
               Простой вызов этого метода вызовет конструктор
               родителя.
               Разумеется, в метод super можно передавать аргументы.
               В предложенном на следующем слайде примере код
               выведет на экран две строчки: «B», «A».



                     Информатика 10-11 классы       Инкапсуляция и полиформизм
Разбор задач              Инкапсуляция              Полиморфизм            Задание    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 классы        Инкапсуляция и полиформизм
Разбор задач           Инкапсуляция              Полиморфизм           Задание    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 классы       Инкапсуляция и полиформизм

Weitere ähnliche Inhalte

Was ist angesagt?

04 классическая логика предикатов
04 классическая логика предикатов04 классическая логика предикатов
04 классическая логика предикатов
Julia Gorbatova
 
Анализ текста на основе лексико-синтаксичеких шаблонов c сокращением многов...
Анализ  текста на основе лексико-синтаксичеких  шаблонов c сокращением многов...Анализ  текста на основе лексико-синтаксичеких  шаблонов c сокращением многов...
Анализ текста на основе лексико-синтаксичеких шаблонов c сокращением многов...
Alexey Noskov
 
элементы языка и типы данных
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данных
Елена Ключева
 
03 классическая логика высказываний
03 классическая логика высказываний03 классическая логика высказываний
03 классическая логика высказываний
Julia Gorbatova
 
Михаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделированиеМихаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделирование
Lidia Pivovarova
 
лекция1
лекция1лекция1
лекция1
shagore
 
ООП в 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
 

Was ist angesagt? (15)

Динамическое программирование на ruby
Динамическое программирование на rubyДинамическое программирование на ruby
Динамическое программирование на ruby
 
Лекция 10 NP-полнота
Лекция 10 NP-полнотаЛекция 10 NP-полнота
Лекция 10 NP-полнота
 
Расстаемся с мифами о ФП
Расстаемся с мифами о ФП Расстаемся с мифами о ФП
Расстаемся с мифами о ФП
 
04 классическая логика предикатов
04 классическая логика предикатов04 классическая логика предикатов
04 классическая логика предикатов
 
Анализ текста на основе лексико-синтаксичеких шаблонов c сокращением многов...
Анализ  текста на основе лексико-синтаксичеких  шаблонов c сокращением многов...Анализ  текста на основе лексико-синтаксичеких  шаблонов c сокращением многов...
Анализ текста на основе лексико-синтаксичеких шаблонов c сокращением многов...
 
Типы данных
Типы данныхТипы данных
Типы данных
 
элементы языка и типы данных
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данных
 
03 классическая логика высказываний
03 классическая логика высказываний03 классическая логика высказываний
03 классическая логика высказываний
 
Михаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделированиеМихаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделирование
 
ch6.pdf
ch6.pdfch6.pdf
ch6.pdf
 
лекция1
лекция1лекция1
лекция1
 
Scala Magic, Alexander Podhaliusin
Scala Magic, Alexander PodhaliusinScala Magic, Alexander Podhaliusin
Scala Magic, Alexander Podhaliusin
 
Ruby статические методы
Ruby статические методыRuby статические методы
Ruby статические методы
 
ООП в 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)
 
Java. Полиморфизм.
Java. Полиморфизм.Java. Полиморфизм.
Java. Полиморфизм.
 

Ähnlich wie Инкапсуляция и полиморфизм в ruby

20091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture0320091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture03
Computer Science Club
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
 
013
013013
013
JIuc
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
sharikdp
 
Понятие предиката. Логические операции над предикатами
Понятие предиката. Логические операции над предикатамиПонятие предиката. Логические операции над предикатами
Понятие предиката. Логические операции над предикатами
aleksashka3
 
4 методика изучения числовых последовательностей
4 методика изучения числовых последовательностей4 методика изучения числовых последовательностей
4 методика изучения числовых последовательностей
Вячеслав Пырков
 

Ähnlich wie Инкапсуляция и полиморфизм в ruby (14)

Ruby: инкапсуляция и полиморфизм
Ruby: инкапсуляция и полиморфизмRuby: инкапсуляция и полиморфизм
Ruby: инкапсуляция и полиморфизм
 
Объектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyОбъектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в ruby
 
20091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture0320091025 algorithmsfornphardproblems kulikov_lecture03
20091025 algorithmsfornphardproblems kulikov_lecture03
 
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
 
04. фкгос по математике 10 11
04. фкгос по математике 10 1104. фкгос по математике 10 11
04. фкгос по математике 10 11
 
M
MM
M
 
SOLID
SOLIDSOLID
SOLID
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
9 класс алгебра
9 класс алгебра9 класс алгебра
9 класс алгебра
 
013
013013
013
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Понятие предиката. Логические операции над предикатами
Понятие предиката. Логические операции над предикатамиПонятие предиката. Логические операции над предикатами
Понятие предиката. Логические операции над предикатами
 
Matematika 10-klass-merzljak-2018-ros
Matematika 10-klass-merzljak-2018-rosMatematika 10-klass-merzljak-2018-ros
Matematika 10-klass-merzljak-2018-ros
 
4 методика изучения числовых последовательностей
4 методика изучения числовых последовательностей4 методика изучения числовых последовательностей
4 методика изучения числовых последовательностей
 

Mehr von Evgeny Smirnov

Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2
Evgeny Smirnov
 
Мастер-класс: Anki карточки
Мастер-класс: Anki карточкиМастер-класс: Anki карточки
Мастер-класс: Anki карточки
Evgeny Smirnov
 
Мастер-класс: Quiz up
Мастер-класс: Quiz upМастер-класс: Quiz up
Мастер-класс: Quiz up
Evgeny Smirnov
 
Мастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox AlgebraМастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox Algebra
Evgeny Smirnov
 
Мастер-класс: начало
Мастер-класс: началоМастер-класс: начало
Мастер-класс: начало
Evgeny Smirnov
 
LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)
Evgeny Smirnov
 
Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42
Evgeny Smirnov
 
Введение в алгоритмы
Введение в алгоритмыВведение в алгоритмы
Введение в алгоритмы
Evgeny Smirnov
 
Построение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицамПостроение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицам
Evgeny Smirnov
 
Функции для работы с электронными таблицами
Функции для работы с электронными таблицамиФункции для работы с электронными таблицами
Функции для работы с электронными таблицами
Evgeny Smirnov
 

Mehr von 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
 
Блок-схемы
Блок-схемыБлок-схемы
Блок-схемы
 
Введение в алгоритмы
Введение в алгоритмыВведение в алгоритмы
Введение в алгоритмы
 
Построение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицамПостроение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицам
 
Функции для работы с электронными таблицами
Функции для работы с электронными таблицамиФункции для работы с электронными таблицами
Функции для работы с электронными таблицами
 

Инкапсуляция и полиморфизм в 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 классы Инкапсуляция и полиформизм