Постановка задачи
В данной статье приводится пример объектно ориентированного программирования на новом алгоритмическом языке Crystal при решении практических задач с элементамистатистического анализа данных.
Для примера использования ООП на языке программирования Crystal рассмотрим задачу измерения температуры и давления воздуха. Для получения измерений применяется два датчика – один в качестве датчика температуры, другой — датчика давления.
В качестве измеренного значения температуры и давления в специальном вычислителе(контроллере) формируется их среднее арифметическое всех измерений каждого датчика — сумма всех измерений, деленная на их количество(оценка математического ожидания).
Разработка программы
Известно, что программа на объектно-ориентированном языке программирования представляет собой совокупность взаимодействующих объектов. Следовательно, для решения поставленной задачи методом ООП необходимо создать необходимый набор классов(предопределенных типов данных), на основе которых будут создаваться объекты программы.
Требуемый набор классов(объектов) создается на основе анализа предметной области и выделения в ней понятий(сущностей), которые участвуют в решении поставленной задачи. В данной задаче такими сущностями будут: датчики температуры и давления, измеренные значения температуры и давления. Для каждой сущности создается отдельный класс.
Поскольку датчики температуры и давления похожи, то в программе целесообразно предусмотреть базовый класс Sensor, отражающий общие свойства любого датчика, и два производных от него класса SensorTemp и SensorDavl, представляющие объекты — датчики температуры и давления, соответственно.
В качестве измеренного значения формируется среднее арифметическое всех измерений — сумма всех измерений, деленная на их количество. Для этого создается отдельный класс Izmer, в котором в методе srZnach осуществляется суммирование элементов массива измерений и вычисление среднего значения(оценки математического ожидания).
Измеренные данные каждого датчика передаются в объект класса Izmer этих классов для выполнения вычислений матожидания.
Код программы.
- class Sensor #измеритель — базовый класс
- @n=5
- @k=15
- @sum=0
- @izmPar =[] of Float64 #создаем пустой массив Array(Float64)
- def initialize(@n : Int32, @k : Int32, izmPar=[] of Float64)
- z = gen(n,k,izmPar) # генерируем массив izmPar(Float64) из n элементов
- # puts izmPar # оператор для отладки программы
- end
- def gen(n,k,mas=[] of Float64)
- i=0
- while i<n
- mas<<k+0.01*k*rand
- i+=1
- end
- # puts mas # оператор для отладки программы
- end
- end
- class SensorTemp < Sensor #измеритель температуры — производный класс
- def srTemp # метод вычисления среднего значения температуры
- end
- end
Далее создается класс для создания объекта — измеритель давления, — как производный класс от базового класса Sensor.
- class SensorDavl < Sensor #измеритель давления — производный класс
- def srDavl # метод вычисления среднего значения давления
- end
- end
- class Izmer # вычислитель среднего значения самостоятельный класс
- def initialize()
- end
- def srZnach(n,mas=[] of Float64)
- i=0
- sum=0
- while i<n
- sum += mas[i]
- i+=1
- end
- srZnach=sum/n
- # puts «Среднее в классе», srZnach # оператор для отладки программы
- return srZnach
- end
- end
# Программа вычисления температуры и давления воздуха будет иметь следующий код.
- puts «Имитация измерителя температуры и давления»
- n=5
- srGenT=25
- srGenD=760
- izmPar =[] of Float64 #создаем пустой массив Array(Float64)
- sensor = Sensor.new(n,5,izmPar)
- izmer=Izmer.new()
- izmTemp =[] of Float64
- sensTemp = SensorTemp.new(n,srGenT,izmTemp)
- printf «Массив температур — «
- #puts «\n», izmTemp # оператор для отладки программы
- izmTemp.each_with_index{ |n, idx| print «%#{3.2}f » % n; print «\n» if idx % 10 == 5 }
- srTemp=izmer.srZnach(n,izmTemp)
- puts «\n», «Средняя температура», «%3.2f» %srTemp
- izmDavl =[] of Float64
- sensDavl = SensorDavl.new(n,srGenD,izmDavl)
- printf «Массив давлений — «
- izmDavl.each_with_index{ |n, idx| print «%#{3.2}f » % n; print «\n» if idx % 10 == 5 }
- srDavl=izmer.srZnach(n,izmDavl)
- puts «\n», «Среднее давление», «%3.2f» %srDavl
Результаты выполнения приведенной выше программы в среде разработки и выполнения языка Crystal представлены на следующем рисунке.
Анализ представленных результатов свидетельствует о работоспособности программы на языке Crystal. Это подтверждает возможности языка программирования Crystal создавать достаточно сложное и эффективное программное обеспечение.
Примечание. Здесь показано, что объектно ориентированное программирование на новом алгоритмическом языке Crystal при решении практических задач статистического анализа случайного набора чисел эффективнее процедурного программирования при решении подобных задач.
Заключение
Пример объектно ориентированного программирования на языке Crystal при решении практических задач показал, что ООП эффективнее процедурного программирования.
Программа, созданная на основе ООП на языке программирования Crystal, более компактна и удобочитаемая по сравнению с такой же программой на основе процедурного программирования.
Другой вариант объектно-ориентированного программирования при создании оконного приложения методом событийно-визуального программирования представлен в статье.
Статьи по теме
А также…
- Что такое виды и парадигмы программирования?
- Как выбирать язык программирования высокого уровня для изучения
- Что выбирать язык или платформу программирования?
- Удаленная работа программистом и выбор языка программирования
- Как быстро изучить язык программирования
- Как изучать простые типы данных языка программирования?
- Как стать специалистом по большим данным?
На этом пока все. До скорой встрече на сайте brasmlibras.ru.