Просмотров-141
0

Пример ООП на языке программирования Crystal

Постановка задачи

В данной статье приводится пример объектно ориентированного программирования на новом алгоритмическом языке Crystal при решении практических задач с элементамистатистического анализа данных.

Для примера использования ООП на языке программирования Crystal рассмотрим задачу измерения температуры и давления воздуха. Для получения измерений  применяется два датчика – один в качестве датчика температуры, другой  — датчика давления.

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

Разработка программы

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

Требуемый набор классов(объектов) создается на основе анализа предметной области и выделения в ней понятий(сущностей), которые участвуют в решении поставленной задачи. В данной задаче такими сущностями будут: датчики температуры и давления, измеренные значения температуры и давления. Для каждой сущности создается отдельный класс.

Поскольку датчики температуры и давления похожи, то в программе целесообразно предусмотреть базовый класс Sensor, отражающий общие свойства любого датчика, и два производных от него класса SensorTemp  и  SensorDavl, представляющие объекты — датчики температуры и давления, соответственно.

В качестве измеренного значения формируется среднее арифметическое всех измерений — сумма всех измерений, деленная на их количество. Для этого создается отдельный класс Izmer, в котором в методе srZnach осуществляется суммирование элементов массива измерений и вычисление среднего значения(оценки математического ожидания).

Измеренные данные каждого датчика передаются в объект класса Izmer этих классов для выполнения вычислений матожидания.

Код программы.

  1. class Sensor                #измеритель — базовый класс
  2.    @n=5
  3.    @k=15
  4.   @sum=0
  5.              @izmPar =[] of Float64    #создаем пустой массив Array(Float64)
  6.   def initialize(@n : Int32, @k : Int32, izmPar=[] of Float64)
  7.             z = gen(n,k,izmPar)  # генерируем массив izmPar(Float64) из n элементов
  8. #          puts izmPar # оператор для отладки программы
  9.   end
  10.    def gen(n,k,mas=[] of Float64)
  11.              i=0
  12.                         while i<n
  13.              mas<<k+0.01*k*rand
  14.                            i+=1
  15.                          end
  16. #    puts mas # оператор для отладки программы
  17.    end
  18. end
  1. class SensorTemp  < Sensor  #измеритель температуры — производный класс
  2.             def srTemp                 # метод вычисления среднего значения температуры
  3.             end
  4. end

Далее создается класс для создания объекта — измеритель давления, — как производный класс от базового класса Sensor.

  1. class SensorDavl  < Sensor  #измеритель давления — производный класс
  2.  def srDavl                 # метод вычисления среднего значения давления
  3.             end
  4. end
  1. class Izmer  # вычислитель среднего значения самостоятельный класс
  2.   def initialize()
  3.   end
  4.    def srZnach(n,mas=[] of Float64)
  5.              i=0
  6.     sum=0
  7.                         while i<n
  8.              sum += mas[i]
  9.                            i+=1
  10.                          end
  11.     srZnach=sum/n
  12. #    puts «Среднее в классе», srZnach # оператор для отладки программы
  13.     return srZnach
  14.    end
  15. end

# Программа вычисления температуры и давления воздуха будет иметь следующий код.

  1. puts «Имитация измерителя температуры и давления»
  2. n=5
  3. srGenT=25
  4. srGenD=760
  5. izmPar =[] of Float64    #создаем пустой массив Array(Float64)
  6. sensor = Sensor.new(n,5,izmPar)
  7.  izmer=Izmer.new()
  8. izmTemp =[] of Float64
  9. sensTemp = SensorTemp.new(n,srGenT,izmTemp)
  10. printf «Массив температур  —  «
  11. #puts «\n», izmTemp # оператор для отладки программы
  12. izmTemp.each_with_index{ |n, idx| print «%#{3.2}f » % n; print «\n» if idx % 10 == 5 }
  13. srTemp=izmer.srZnach(n,izmTemp)
  14. puts «\n», «Средняя температура», «%3.2f» %srTemp
  15. izmDavl =[] of Float64
  16. sensDavl = SensorDavl.new(n,srGenD,izmDavl)
  17. printf «Массив давлений  —  «
  18. izmDavl.each_with_index{ |n, idx| print «%#{3.2}f » % n; print «\n» if idx % 10 == 5 }
  19. srDavl=izmer.srZnach(n,izmDavl)
  20. puts «\n», «Среднее давление», «%3.2f» %srDavl

Результаты выполнения приведенной выше программы в среде разработки и выполнения языка Crystal представлены на следующем рисунке.

Объектно-ориентированное программирование на языке Crystal- результаты выполнения программы

Анализ представленных результатов свидетельствует о работоспособности программы на языке Crystal. Это подтверждает возможности языка программирования Crystal создавать достаточно сложное и эффективное программное обеспечение.

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

Заключение

Пример объектно ориентированного программирования на языке Crystal при решении практических задач показал, что ООП эффективнее процедурного программирования.

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

Другой вариант объектно-ориентированного программирования при создании оконного приложения методом событийно-визуального программирования представлен в статье.

Статьи по теме

Изучение управляющих
конструкций языка
программирования Crystal
Изучение языка программирования Crysal Управляющие конструкции Простые типы данных
языка программирования
Crystal
Язык программирования Crystal
Структурированные
типы данных языка
программирования Crystal
Структурированные типы данных Объектно — ориентированное
программирование на языке Crystal
Объектно ориентированное программирование

А также…

На этом пока все. До скорой встрече на сайте brasmlibras.ru.

Внимание! Кто хочет своевременно узнавать о выходе новой статьи на сайте должен подписаться.

ПОДПИСКА НА РАССЫЛКУ

Статьи об онлайн курсах обучения

Дистанционное обучение
Обучение программированию
Проектирование информационных систем
 
Реклама. Информация о рекламодателе по ссылкам в статье.

brasm

Пенсионер с 33 - летним педагогическим стажем

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *