Изучение "дискриминационных объединенных" типов F#, как аналога "наследственной иерархии", в школьном курсе информатики

Понятие типов, принципов работы с языком в императивной и функциональной реализации. Исследование таких синтаксических конструкций как кортежи и записи. Понятие "дискриминационный объединённый". Создание типов путем "сбора" существующих типов вместе.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 27.04.2019
Размер файла 18,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Изучение «дискриминационных объединенных» типов F#, как аналога «наследственной иерархии», в школьном курсе информатики

Векслер Виталий Абрамович, кандидат наук, доцент, доцент

Саратовский государственный университет имени Н. Г. Чернышевского

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

Ключевые слова: ТИПЫ ДАННЫХ, ПРОГРАММИРОВАНИЕ, ИНФОРМАТИКА, ОБРАЗОВАНИЕ

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

Особый интерес, для изучения в школьном курсе информатики, представляет собой язык F#. Структура F# во многом схожа со структурой OCaml с той лишь разницей, что F# реализован поверх библиотек и среды исполнения .NET. Код на языке F# является безопасным в отношении типов, часто бывает более компактным, чем аналогичный код C#, за счёт вывода типов. В F# действует строгая типизация (ошибки определяются на этапе компиляции), неявные преобразования типов полностью отсутствуют, что полностью исключает ошибки, связанные с приведением типов. Язык насыщен рядом возможностей, таких как упрощенный синтаксис, обобщённое программирование и функции высших порядков, которые позволяют писать абстрактные обобщённые алгоритмы, которые управляют параметризованными структурами данных.

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

Рассмотрев с учащимися понятия типов, принципов работы с языком в императивной и функциональной реализации, необходимо уделить время исследованию таких синтаксических конструкций как кортежи и записи. После закрепления основных структур языка следует рассмотреть понятие «дискриминационный объединённый» тип как суммы пользовательских и стандартных типов, при этом провести параллели с объектно-ориентированными конструкциями.

Кортежи и записи являются примерами создания новых типов путем «сбора» существующих типов вместе. Другим способом создания новых типов становится «суммирование» существующих типов.

Возникает задача по определению функции, которая работает, например, с целыми числами или логическими значениями, возможно, чтобы преобразовать их в строки. Но при этом, необходимо быть строгими и не принимать никакого другого типа (например, вещественные числа или строки).

Возникает необходимость в типе, который представляет все возможные целые числа и все возможные булевы значения -- тип «сумма». В этом случае новый тип -- это «сумма» целочисленного типа плюс булевский тип.

В F # тип суммы называется «дискриминационным объединенным» типом. Каждый тип компонента должен быть помечен меткой, для того чтобы их можно было разделить («дискриминировать»). Метки могут быть любыми идентификаторами, но должны начинаться с буквы верхнего регистра.

Пример определения:

type IntOrBool = ?| I of int?| B of bool

«I» и «B» -- это просто произвольные метки. Для небольших типов мы можем поместить определение в одну строку: type IntOrBool = I of int | B of bool.

Типы компонентов могут быть любыми другими типами, включая кортежи, записи, другие типы соединений и т. д.

type Person = {first:string; last:string}?type IntOrBool = I of int | B of booltype MixedType = ?| Tup of int * int?// кортеж из двух целочисленных значений?| P of Person??? // тип запись?| L of int list?? // список?| U of IntOrBool??// объединенный тип

Ярлыки могут быть любым идентификатором, включая имена самого типа компонента.

type IntOrBool = Int32 of Int32 | Boolean of Boolean

кортеж дискриминационный объединенный язык

Этот стиль «дублирования имен» на самом деле довольно распространен.

Чтобы создать значение созданного «дискриминационного объединенного» типа, используется «конструктор», который ссылается только на один из возможных случаев объединения.

type IntOrBool = I of int | B of boollet i?= I 99??// use the "I" constructor// val i : IntOrBool = I 99let b?= B true?// use the "B" constructor// val b : IntOrBool = B true

Если конструктор имеет более одного «параметра», создается значение посредством вызова функции:

type Person = {first:string; last:string}type MixedType =?| Tup of int * int?| P of Personlet myTup?= Tup (2,99)??// конструктор для картежа// val myTup : MixedType = Tup (2,99)let myP?= P {first="Al"; last="Jones"} // конструктор для записи// val myP : MixedType = P {first = "Al";last = "Jones";}

На основании принципа создания «дискриминационных объединенных» типов, с учащимися решается ряд задач, в которых данный тип выступает как «родительский» объединяющий «дочерние» типы.

Рассмотрим варианты решений одной из базовых задач, предложенные учащимися.

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

Решение 1.

open Systemtype Animals =??| Elephant of string * double * double?//имя * рост * вес??| Giraffe of string * double * double? //имя * рост * вес

??| Hippo of string * double * double?? //имя * рост * вес??| Monkey of string * double * double??//имя * рост * весlet MaxHeight list =??let mutable max : double = -1.0??for i in list do????match i with????| Elephant (_, h, _) -> if h > max????????????????then max <- h????| Giraffe (_, h, _) -> if h > max

??????????????? then max <- h????| Hippo (_, h, _) -> if h > max?????????????? then max <- h????| Monkey (_, h, _) -> if h > max???????????????then max <- h

??maxlet MinAnimal list =??let mutable min : double = Double.MaxValue??let mutable name : string = ""??for i in list do

????match i with????| Elephant (n, _, w) -> if w < min

????????????????then min <- w

?????????????????? name <- n????| Giraffe (n, _, w) -> if w < min??????????????? then min <- w

??????????????????name <- n????| Hippo (n, _, w) -> if w < min?????????????? then min <- w

?????????????????name <- n????| Monkey (n, _, w) -> if w < min???????????????then min <- w

????????????????? name <- n??namelet Print a =??match a with??| Elephant (n, h, w) -> String.Format("Слон {0}, рост: {1}, вес: {2}", n, h, w)??| Giraffe (n, h, w) -> String.Format("Жираф {0}, рост: {1}, вес: {2}", n, h, w)??| Hippo (n, h, w) -> String.Format("Бегемот {0}, рост: {1}, вес: {2}", n, h, w)??| Monkey (n, h, w) -> String.Format("Обезьяна {0}, рост: {1}, вес: {2}", n, h, w)let e = Elephant("El", 200.0, 1500.0)let g = Giraffe("Gr", 1000.0, 1000.0)let h = Hippo("Hp", 200.0, 2000.0)let m = Monkey("Mn", 50.0, 20.0)let list = [|e; g; h; m|]let max = MaxHeight listlet min = MinAnimal listConsole.WriteLine("Самое высокое животное: " + max.ToString())Console.WriteLine("Самое маленькое хивотное: " + min.ToString())Console.WriteLine(Print g)Console.WriteLine(Print h)m)

Решение 2

open System type Animal =? | Elephant of string * double? | Giraffe of string * double? | Hippo of string * double? | Monkey of string * double let PM (a : Animal) : string * double =??let Result =????match a with????| Elephant(n,a1) -> (n,a1)????| Giraffe(n,a1) -> (n,a1)????| Hippo(n,a1) -> (n,a1)????| Monkey(n,a1) -> (n,a1)??Result let MaxHeght (lst: (Animal list)) =??let res = List.sortBy(fun a -> snd (PM a)) lst??printfn "%s" ("Наибольший рост: " + (snd (PM (res.Item(res.Length -- 1)))).ToString()) let SmallAnimal lst =??let res = List.sortBy(fun a -> snd (PM a)) lst??let out = fst (PM (res.Item(0)))??printfn "%s" ("Наименьший рост у " + out) let PrintA(a:Animal) =??let textResult =????match a with????| Elephant (name, height) -> "Имя: " + name + " Рост: " + height.ToString()????| Giraffe (name, height) -> "\nИмя: " + name + " Рост: " + height.ToString()

????| Hippo (name, height) -> "\nИмя: " + name + " Рост: " + height.ToString()????| Monkey (name, height) -> "\nИмя: " + name + " Рост: " + height.ToString()??printfn "%s" textResult [<EntryPoint>]let main argv =

??let a1 = Elephant ("Слон", 20.);??let b1 = Giraffe ("Жираф", 50.);

??let c1 = Hippo ("Бегемот", 10.);??let d1 = Monkey ("Обезьяна", 5.);

??let res = [a1; b1; c1; d1]??MaxHeght res??SmallAnimal res

??for i in res do????PrintA i??Console.ReadLine() |> ignore ??0 // возвращение целочисленного кода выхода

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

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

1. Магомедов Р.М. Объектно-ориентированное программирование -инновационный путь в программирование в школе//Известия Чеченского государственного педагогического института. 2009. № 2.

2. Векслер В.А. Программирование на языке f# в школьном курсе информатики / Сборник: Информационные технологии в образовании "ИТО-Саратов-2016" Материалы VIII Международной научно-практической конференции. 2016. С. 36-40.

3. Валиева А.М Проблемы развития алгоритмического мышления младших школьников в условиях информатизации образования // URL: https://scienceforum.ru/2013/article/2013007474 (доступ свободный, 16.02.2019).

Размещено на Allbest.ru

...

Подобные документы

  • Организация типов данных. Записи, оператор присоединения. Множества, операции над ними. Строки, стандартные процедуры и функции, работающие со строками. Совместимость типов. Явное и неявное преобразование типов. Многомерные массивы. Операции отношения.

    презентация [30,8 K], добавлен 13.10.2013

  • Общие и отличительные черты объектов, связь между ними. Принципы организации иерархии и понятия объектно-ориентированной парадигмы программирования. Анализ предметной области, определение абстрактных типов данных, проектирование классов и коллекций.

    курсовая работа [2,1 M], добавлен 11.03.2016

  • Особенности строковых типов данных и их обработка. Записи как совокупность поименованных компонентов различных типов, основные принципы работы с ними. Массивы - элементы и массивы структур. Понятие и свойства объединений. Файлы и работа с ними в языке СИ.

    презентация [73,1 K], добавлен 09.12.2013

  • Изучение структуры и алгоритмов работы асинхронных и синхронных триггеров в счетном режиме. Исследование функций переходов и возбуждения основных типов триггеров. Рассмотрение взаимозаменяемости функциональных электронных устройств различных типов.

    лабораторная работа [394,7 K], добавлен 19.01.2015

  • Синтаксис языка РНР, его переменные и чувствительность их имен к регистру. Гибкость в отношении типов переменных, преобразование типов. Набор основных типов данных при работе с переменными. Методы передача переменных скрипту. Операторы цикла и выбора.

    дипломная работа [27,3 K], добавлен 15.04.2009

  • Рассмотрение основных типов данных: значений и ссылок. Отражение объектно-ориентированной методологии одиночного наследования IL в иерархической структуре общей системы типов. Виды интрефейсов и делегатов. Встроенные типы данных в спецификации CTS.

    курсовая работа [99,0 K], добавлен 09.08.2015

  • Создание шаблона, проведение операции сортировки и фильтрации. Разработка электронной таблицы, содержащей постоянные значения разных типов; расчеты по формулам и функциям различных типов. Разработка алгоритма и создание макроса для выполнения расчетов.

    курсовая работа [589,0 K], добавлен 17.12.2009

  • Классификация типов данных, отличия синтаксических конструкций языков C# и C++. Базовые типы: Array, String, StringBuilder. Средства стандартного ввода и вывода и возможности форматирования вывода. Понятие о регулярных выражениях и их применении.

    лабораторная работа [148,8 K], добавлен 13.05.2014

  • Написание программы на языке Delphi - создание электронной записной книжки. Описание типов "запись", полей и массива, составление процедур. Создание приветствия и редактирование записи. Создание команды для вызова справки. Принцип работы программы.

    контрольная работа [17,9 K], добавлен 23.09.2010

  • Названия целых типов, длина их внутреннего представления в байтах и диапазон возможных значений. Кодировка символов в соответствии со стандартом ANSI. Описание типа массива в Object Pascal. Выделение и освобождение динамической памяти, псевдонимы типов.

    курсовая работа [184,5 K], добавлен 10.02.2016

  • Сравнение скорости выполнения запросов, построенных на таблицах с использованием типов char и varchar. Настройка окружения, создание баз данных, разработка приложения. Проведение экспериментов по видам запросов: на вставку данных, их обновление и выборку.

    курсовая работа [666,8 K], добавлен 12.08.2011

  • Классификация и разновидности типов подключения к интернету, используемых на современном этапе, степень их распространения в Беларуси. Оценка главных преимуществ и недостатков каждого из типов подключения, особенности и средства, специальные условия.

    реферат [29,4 K], добавлен 05.05.2012

  • Возникновение информатики во второй половине XX столетия. Теория графов. Понятие и терминология теории графов. Некоторые задачи теории графов. Математическая логика и теория типов. Теория вычислимости и искусственный интеллект.

    реферат [247,4 K], добавлен 15.08.2007

  • Методы высшего порядка, применяемые в обработке последовательностей. Функциональная абстракция, трактовка параметров языка. Моделирование обобщенных (generic) типов с помощью абстрактных типов. Повторное использование классов. Автономные компоненты Scala.

    курсовая работа [45,6 K], добавлен 24.03.2014

  • Решение задач особых типов, к которым относятся: вехи, повторяющиеся и прерванные задачи. Технология создания подчиненных и взаимосвязанных проектов. Представление вехи на календарном плане. Способы создания консолидированного и подчиненного проекта.

    презентация [2,1 M], добавлен 15.03.2014

  • Разработка теории и методики преподавания раздела "Алгоритмизация и программирование" в школьном курсе информатики. Методические проблемы изучения алгоритмов работы с величинами. Требования к знаниям учащихся по линии алгоритмизации и программирования.

    курсовая работа [70,2 K], добавлен 09.07.2012

  • Профориентация: понятие, основные виды. Схемы профессиональной деятельности по Климову Е.А. Психологические требования профессий "человек-техника". Окно редактора функций принадлежности. График одномерной зависимости. Результат работы программы.

    курсовая работа [960,7 K], добавлен 22.04.2012

  • Методы чтения и записи различных типов данных на сменные магнитные или оптические носители. Типы приводов: floppy-дисковод, Iomega Zip, накопители на съемных дисках, CD или DVD-приводы, их производители. Увеличение скорости чтения и записи на дисководах.

    реферат [15,9 K], добавлен 16.11.2010

  • Создание однотабличных баз данных и ключей, индексирование однотабличной БД с помощью конструктора таблиц Table Designer в SQL Server Management Studio. Понятие и назначение индексов кластерного и некластерного типов, инструкция по их созданию в БД.

    лабораторная работа [684,9 K], добавлен 01.12.2011

  • Место темы "Кодирование информации" в школьном курсе информатики. Рекомендации по изучению "Кодирования информации" в школьном курсе информатики. Дидактический материал для изучения темы "Кодирование информации" и внеклассное мероприятие по информатике.

    курсовая работа [2,3 M], добавлен 17.06.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.