Изучение объектно-ориентированного программирования в школьном курсе информатики на базе языка программирования F#

№94-1,

педагогические науки

В статье рассматривается вопрос изучения объектно-ориентированного программирования в школьном курсе информатики, на профильном уровне или в рамках факультативных занятий. Приводятся примеры изучаемых разделов и варианты решенных задач на языке F#.

Похожие материалы

Рассмотрение основ программирования в базовом курсе информатики осуществляется на основе структурных языков программирования «Basic» и «Pascal». Данный подход на сегодня уже устарел и не отвечает современным технологиям программирования, поэтому становится актуальным вопрос внедрения в школьный курс парадигмы объектно-ориентированного программирования.

Основная цель изучения объектно-ориентированного программирования — моделирования объектов реального мира и описание взаимодействия между ними. Объектно-ориентированное программирование является ведущим подходом в программировании и реализуется сегодня уже практически в любом современном языке программирования. Изучение данной парадигмы программирования предусматривает рассмотрение основных понятий объектно-ориентированного программирования (класс; экземпляр класса; характеристики, методы, свойства, индексаторы класса; интерфейсы; абстрактные классы), работы с большим числом уже созданных библиотек и созданием персональных компонентов.

Отметим, что на современном этапе развития школьной информатики статус объектно-ориентированного программирования в базовом курсе до сих пор полностью не определен. Методика изучения в школе любых видов объектного программирования разработана совершенно недостаточно, и как правило сводится лишь к проектированию в визуальном дизайнере форм. Именно поэтому на современном этапе стоит разделить объектно-ориентированное программирование с визуализацией посредством графических объектов.

В рамках профильных курсов, факультативов, кружковой деятельности по информатики возможно изучения данной парадигмы. Основным языком программирования на основе которого может пройти изучение может стать F#.

F# (произносится эф-шарп) — это мультипарадигменный язык программирования из семейства языков .NET Framework, поддерживающий функциональное программирование в дополнение к императивному (процедурному) и объектно-ориентированному программированию. Это уже окончательно сформировавшийся кроссплатформенный функциональный язык программирования с открытым исходным кодом. Он позволяет пользователям и организациям решать сложные вычислительные проблемы с помощью простого, удобного в обслуживании и надежного кода.

F # используется в широком диапазоне областей применения и поддерживается как активным открытым сообществом, так и ведущими в отрасли компаниями, предоставляющими профессиональные инструменты. Работать с языком программирование возможно в интегрированных средах разработки (например, Visual Studio), или онлайн-компиляторах (например, ideone.com).

Классы в F# задают с помощью ключевого слова type, за которым следует частное имя класса, знак равенства и ключевое слово class (необязательное). Завершается определение класса ключевым словом end (необязательное). Для того, чтобы задать конструктор, необходимо в определение класса включить компонент с оператором new. Определение класса должно содержать в себе хотя бы один конструктор, иначе код не будет компилироваться. Для того чтобы определить поле, необходимо добавляют его именем ключевое слово val. По умолчанию поля класса является неизменяемы, для того чтобы сделать поле изменяемым, необходимо добавить перед его именем оператор mutable. Методы класса определяются посредством оператора member.

Рассмотрим примеры заданий.

Задача 1. Создайте явным образом класс «Прямоугольник». Продумайте какими полями характеризуется данная фигура. Определите варианты конструирования фигуры (два конструктора). Какие методы может реализовывать прямоугольник?

type Rectangle =  val mutable x1 : float  val mutable y1 : float  val mutable x2 : float  val mutable y2 : float  new (new_x1, new_y1, new_x2, new_y2) =    { x1 = new_x1; y1 = new_y1; x2 = new_x2; y2 = new_y2 }  new () = new Rectangle (-1.0, -1.0, 1.0, 1.0)  member this.GetArea () =    abs (this.x2 — this.x1) * abs (this.y2 — this.y1)  member this.GetPerimeter () =    2.0 * (abs (this.x2 — this.x1) + abs (this.y2 — this.y1))  member this.PrintN () =    printfn "прямоугольник:\n* т1: (%f; %f)\n* т2: (%f; %f)\n* площадь: %f\n* периметр: %f"        this.x1 this.y1 this.x2 this.y2 (this.GetArea ()) (this.GetPerimeter ()) let r1 = Rectangle (1.0, 2.0, 5.0, 6.0)let r2 = Rectangle ()

Задача 2. Создайте явным образом класс «Окружность». Продумайте какими полями характеризуется данная фигура. Определите варианты конструирования фигуры (два конструктора). Какие методы может реализовывать прямоугольник?

type Circle =val c_x : floatval c_y : floatval radius : floatval diametr : floatval name : string//Конструктор 1 — принимает 4 параметраnew (r, x, y, n) = {radius = r; diametr = r * 2.0;c_x = x; c_y = y; name = n}//Конструктор 1 — принимает 2 параметраnew (r, n) = {radius = r; diametr = r * 2.0;c_x = 0.0; c_y = 0.0; name = n}//Конструктор 3 — не имеет параметровnew () = {radius = 5.0; diametr = 10.0; c_x = 0.0; c_y = 0.0; name = "Circle" }member this.Square = this.radius * this.radius * 3.14member this.Perimetr = this.diametr * 3.14member this.Name = this.namemember this.X = this.c_xmember this.Y = this.c_y let c1 = new Circle(3.0, 1.0, 1.0, "firstCircle")printfn "%A" c1.Perimetrprintfn "%A" c1.Squareprintfn "%A" c1.Xprintfn "%A" c1.Y

Рассмотрев ряд задач проектирования классов в объектно-ориентированном программировании, учащиеся подводятся к основной идее: класс — это некоторый способ описания сущности, задающий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт). С точки зрения программирования класс необходимо рассматривать как набор данных (полей, атрибутов, членов класса) и функций для работы с ними (методов). С точки зрения структуры программы, класс является сложным типом данных. Представителем класса в основной программе является экземпляр класса.

Введение понятий об абстрактном классе, интерфейсе — становятся задачами уже более сложного уровня. F# поддерживает только одиночное наследование. Наследование задается с помощью ключевого слова inherit которое идет сразу после class. При вызове любого конструктора потомка автоматически вызовется пустой конструктор предка. Если такого конструктора в предке нет, необходимо явно вызвать в теле конструктора потомка базовый конструктор с помощью ключевого слова inherit.

Задача 3. Построить иерархию классов, начиная с абстрактного класса.

[<AbstractClass>]type VolumetricFigure =  val radius : double  new (r) = {radius = r}  new () = {radius = 35.0}  //Возвращает объем  abstract member GetVolume : double -> double let pi = 3.14159 // Представляет прямые круговые цилиндрыtype StraightCircularCylinder =  inherit VolumetricFigure  val height : double  new (r, h) = {inherit VolumetricFigure(r); height = h}  new (h) = {inherit VolumetricFigure(); height = h}  new () = {inherit VolumetricFigure(); height = 12.5}   override this.GetVolume(_) = this.radius * this.radius * this.height * pi// Представляет полые цилиндрыtype HollowCylinder =  inherit StraightCircularCylinder  val insiderad : double  new (r, h, i) = {inherit StraightCircularCylinder(r, h); insiderad = i}  new (i) = {inherit StraightCircularCylinder(); insiderad = i}  new () = {inherit StraightCircularCylinder(); insiderad = 7.5}   override this.GetVolume(_) = (this.radius * this.radius — this.insiderad * this.insiderad) * this.height * pi

Таким образом, представление классов в F# выглядит более сжато, по сравнению со многими другими языками программирования. Понимание сущности парадигмы объектно-ориентированного программирования прививается более фундаментально. На начальном уровне происходит изучение основных базовых примеров. Ученики на компьютере, пока что с помощью учителя, пробуют решать задачи, и разбираются с новыми для себя понятиями. Позже они уже начинают придумывать свои сущности и реализовывать их.

Список литературы

  1. F Sharp [Электронный ресурс] // Википедия, Url: https://ru.wikipedia.org/wiki/F_Sharp (дата обращения 10.12.18)
  2. Векслер В.А. Программирование на языке f# в школьном курсе информатики // В сборнике: Информационные технологии в образовании "ИТО-Саратов-2016" Материалы VIII Международной научно-практической конференции. 2016. С. 36-40.
  3. Три парадигмы F# [Электронный ресурс] // Url: https://habr.com/post/55272/ (дата обращения 01.12.18)
  4. Учебно-методический комплекс "Объектно-ориентированное программирование в профильном курсе информатики [Электронный ресурс] // Инфоурок: Url: https://infourok.ru/uchebnometodicheskiy-kompleks-obektnoorientirovannoe-programmirovanie-v-profilnom-kurse-informatiki-2837967.html (дата обращения 03.12.18)