Обоснование выбора языка программирования и IDE



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

Python (в русском языке распространено название пито́н) — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

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

Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ. Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные. Есть реализации интерпретаторов для JVM (с возможностью компиляции), MSIL (с возможностью компиляции), LLVM и других. Проект PyPy предлагает реализацию Python с использованием JIT-компиляции, которая значительно увеличивает скорость выполнения Python-программ.

Python — активно развивающийся язык программирования, новые версии (с добавлением/изменением языковых свойств) выходят примерно раз в два с половиной года. Вследствие этого и некоторых других причин на Python отсутствуют стандарт ANSI, ISO или другие официальные стандарты, их роль выполняет CPython.

Python портирован и работает почти на всех известных платформах — от КПК до мейнфреймов. Существуют порты под Microsoft Windows, практически все варианты UNIX (включая FreeBSD и Linux), Plan 9, Mac OS и Mac OS X, iPhone OS 2.0 и выше, Palm OS, OS/2, Amiga, HaikuOS, AS/400 и даже OS/390, Windows Mobile, Symbian и Android.

По мере устаревания платформы её поддержка в основной ветви языка прекращается. Например, с серии 2.6 прекращена поддержка Windows 95, Windows 98 и Windows ME. Однако на этих платформах можно использовать предыдущие версии Python — на данный момент сообщество активно поддерживает версии Python начиная от 2.3 (для них выходят исправления).

При этом, в отличие от многих портируемых систем, для всех основных платформ Python имеет поддержку характерных для данной платформы технологий (например, Microsoft COM/DCOM). Более того, существует специальная версия Python для виртуальной машины Java — Jython, что позволяет интерпретатору выполняться на любой системе, поддерживающей Java, при этом классы Java могут непосредственно использоваться из Python и даже быть написанными на Python. Также несколько проектов обеспечивают интеграцию с платформой Microsoft .NET, основные из которых — IronPython и Python.Net.

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

Добавить новый тип можно либо написав класс (class), либо определив новый тип в модуле расширения (например, написанном на языке C). Система классов поддерживает наследование (одиночное и множественное) и метапрограммирование. Возможно наследование от большинства встроенных типов и типов расширений.

Все объекты делятся на ссылочные и атомарные. К атомарным относятся int, long (в версии 3 любое число int, так как в версии 3 нет ограничения на размер), complex и некоторые другие. При присваивании атомарных объектов копируется их значение, в то время как для ссылочных копируется только указатель на объект, таким образом, обе переменные после присваивания используют одно и то же значение. Ссылочные объекты бывают изменяемые и неизменяемые. Например, строки и кортежи являются неизменяемыми, а списки, словари и многие другие объекты — изменяемыми. Кортеж в Python является, по сути, неизменяемым списком. Во многих случаях кортежи работают быстрее списков, поэтому если вы не планируете изменять последовательность, то лучше использовать именно их.

Имя (идентификатор) может начинаться с латинской буквы (в Python 3 — буквы любого алфавита в Юникоде, например, кириллицы) любого регистра или подчёркивания, после чего в имени можно использовать и цифры. В качестве имени нельзя использовать ключевые слова (их список можно узнать по import keyword; print(keyword.kwlist)) и нежелательно переопределять встроенные имена. Имена, начинающиеся с символа подчёркивания, имеют специальное значение.

В каждой точке программы интерпретатор имеет доступ к трём пространствам имён (то есть отображениям имён в объекты): локальному, глобальному и встроенному.

Области видимости имён могут быть вложенными друг в друга (внутри определяемой функции видны имена из окружающего блока кода). На практике с областями видимости и связыванием имён связано несколько правил «хорошего тона», о которых можно подробнее узнать из документации.

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

Возможности и особенности.

1. Классы являются одновременно объектами со всеми ниже приведёнными возможностями.

2. Наследование, в том числе множественное.

3. Полиморфизм (все функции виртуальные).

4. Инкапсуляция (два уровня — общедоступные и скрытые методы и поля). Особенность — скрытые члены доступны для использования и помечены как скрытые лишь особыми именами.

5. Специальные методы, управляющие жизненным циклом объекта: конструкторы, деструкторы, распределители памяти.

6. Перегрузка операторов (всех, кроме is, '.', '=' и символьных логических).

7. Свойства (имитация поля с помощью функций).

8. Управление доступом к полям (эмуляция полей и методов, частичный доступ, и т. п.).

9. Методы для управления наиболее распространёнными операциями (истинностное значение, len(), глубокое копирование, сериализация, итерация по объекту, …)

10. Метапрограммирование (управление созданием классов, триггеры на создание классов, и др.)

11. Полная интроспекция.

12. Классовые и статические методы, классовые поля.

13. Классы, вложенные в функции и классы.

Python поддерживает парадигму функционального программирования, в частности:

· функция является объектом;

· функции высших порядков;

· рекурсия;

· развитая обработка списков (списочные выражения, операции над последовательностями, итераторы);

· аналог замыканий;

· частичное применение функции;

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

Программное обеспечение (приложение или библиотека) на Python оформляется в виде модулей, которые в свою очередь могут быть собраны в пакеты. Модули могут располагаться как в каталогах, так и в ZIP-архивах. Модули могут быть двух типов по своему происхождению: модули, написанные на «чистом» Python, и модули расширения (extension modules), написанные на других языках программирования. Например, в стандартной библиотеке есть «чистый» модуль pickle и его аналог на Си: cPickle. Модуль оформляется в виде отдельного файла, а пакет — в виде отдельного каталога. Подключение модуля к программе осуществляется оператором import. После импорта модуль представлен отдельным объектом, дающим доступ к пространству имён модуля. В ходе выполнения программы модуль можно перезагрузить функцией reload().

Обработка исключений поддерживается в Python посредством операторов try, except, else, finally, raise, образующих блок обработки исключения.

Совместное использование else, except и finally стало возможно только начиная с Python 2.5. Информация о текущем исключении всегда доступна через sys.exc_info(). Кроме значения исключения, Python также сохраняет состояние стека вплоть до точки возбуждения исключения — так называемый traceback.

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

В программах на Python широко используются итераторы. Цикл for может работать как с последовательностью, так и с итератором. Все коллекции, как правило, предоставляют итератор. Объекты определённого пользователем класса тоже могут быть итераторами. Подробнее об итераторах можно узнать в разделе о функциональном программировании. Модуль itertools стандартной библиотеки содержит много полезных функций для работы с итераторами.

Одной из интересных возможностей языка являются генераторы — функции, сохраняющие внутреннее состояние: значения локальных переменных и текущую инструкцию. Генераторы могут использоваться как итераторы для структур данных и для ленивых вычислений.

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

В Python 2.4 появились генераторные выражения — выражения, дающие в результате генератор. Генераторные выражения позволяют сэкономить память там, где иначе требовалось бы использовать список с промежуточными результатами.

Стандартная библиотека:

Богатая стандартная библиотека является одной из привлекательных сторон Python. Здесь имеются средства для работы со многими сетевыми протоколами и форматами Интернета, например, модули для написания HTTP-серверов и клиентов, для разбора и создания почтовых сообщений, для работы с XML и т. п. Набор модулей для работы с операционной системой позволяет писать кроссплатформенные приложения. Существуют модули для работы с регулярными выражениями, текстовыми кодировками, мультимедийными форматами, криптографическими протоколами, архивами, сериализации данных, поддержка юнит-тестирования и др.

Модули расширения и программные интерфейсы:

Помимо стандартной библиотеки существует множество библиотек, предоставляющих интерфейс ко всем системным вызовам на разных платформах; в частности, на платформе Win32 поддерживаются все вызовы Win32 API, а также COM в объёме не меньшем, чем у Visual Basic или Delphi. Количество прикладных библиотек для Python в самых разных областях без преувеличения огромно (веб, базы данных, обработка изображений, обработка текста, численные методы, приложения операционной системы и т. д.).

Для Python принята спецификация программного интерфейса к базам данных DB-API 2 и разработаны соответствующие этой спецификации пакеты для доступа к различным СУБД: Oracle, MySQL, PostgreSQL, Sybase, Firebird (Interbase), Informix, Microsoft SQL Server и SQLite. На платформе Windows доступ к БД возможен через ADO (ADOdb). Коммерческий пакет mxODBC для доступа к СУБД через ODBC для платформ Windows и UNIX разработан eGenix. Для Python написано много ORM (SQLObject, SQLAlchemy, Dejavu, Django), выполнены программные каркасы для разработки веб-приложений (Django, Pylons, Pyramid).

Библиотека NumPy для работы с многомерными массивами позволяет достичь производительности научных расчётов, сравнимой со специализированными пакетами. SciPy использует NumPy и предоставляет доступ к обширному спектру математических алгоритмов (матричная алгебра — BLAS уровней 1—3, LAPACK, БПФ…). Numarray специально разработан для операций с большими объёмами научных данных.

WSGI — интерфейс шлюза с веб-сервером (Python Web Server Gateway Interface).

Python предоставляет простой и удобный программный интерфейс C API для написания собственных модулей на языках Си и C++. Такой инструмент как SWIG позволяет почти автоматически получать привязки для использования C/C++ библиотек в коде на Python. Возможности этого и других инструментов варьируются от автоматической генерации (C/C++/Fortran)-Python интерфейсов по специальным файлам (SWIG, pyste, SIP, pyfort), до предоставления более удобных API (boost::python, CXX, Pyhrol и др.). Инструмент стандартной библиотеки ctypes позволяет программам Python напрямую обращаться к динамическим библиотекам/DLL, написанным на Си. Существуют модули, позволяющие встраивать код на С/C++ прямо в исходные файлы Python, создавая расширения «на лету» (pyinline, weave).

Другой подход состоит во встраивании интерпретатора Python в приложения. Python легко встраивается в программы на Java, C/C++, OCaml. Взаимодействие Python-приложений с другими системами возможно также с помощью CORBA, XML-RPC, SOAP, COM.

С помощью проекта Cython возможна трансляция программ, написанных на языках Python и Pyrex (англ.) в код на языке Си, с последующей компиляцией в машинный код. Cython используется для упрощения написания Python-библиотек, при его использовании отмечается ускорение кода и уменьшение накладных расходов.

Экспериментальный проект Shedskin предполагает создание компилятора для трансформации неявно типизированных Python программ в оптимизированный С++ код. Начиная с версии 0.22 Shedskin позволяет компилировать отдельные функции в модули расширений.

Python и подавляющее большинство библиотек к нему бесплатны и поставляются в исходных кодах. Более того, в отличие от многих открытых систем, лицензия никак не ограничивает использование Python в коммерческих разработках и не налагает никаких обязательств кроме указания авторских прав.

Одним из каналов распространения и обновления пакетов для Python является PyPI (англ. Python Package Index).

Контроль типов и перегрузка функций:

Существуют модули, позволяющие контролировать типы параметров функций на этапе исполнения, например, typecheck или method signature checking decorators. Необязательная декларация типов для параметров функции добавлена в Python 3, интерпретатор при этом не проверяет типы, а только добавляет соответствующую информацию к метаданным функции для последующего использования этой информации модулями расширений.

Перегрузка функций реализована различными сторонними библиотеками, в том числе PEAK. Непринятые планы по поддержке перегрузки в Python3000 были частично реализованы в библиотеке overloading-lib.

Возможности:

Основные изменения, внесённые в версии 3.0.

· Синтаксическая возможность для аннотации параметров и результата функций (например, для передачи информации о типе или документирования).

· Полный переход на unicode для строк.

· Введение нового типа «неизменяемые байты» и типа «изменяемый буфер». Оба необходимы для представления бинарных данных.

· Новая подсистема ввода-вывода (модуль io), имеющая отдельные представления для бинарных и текстовых данных.

· Абстрактные классы, абстрактные методы (доступно уже в 2.6).

· Иерархия типов для чисел.

· Выражения для словарей и множеств {k: v for k, v in a_dict} и {el1, el2, el3} (по аналогии со списковыми выражениями). Эта возможность была также добавлена в Python 2.7

· Изменения print из встроенного выражения во встроенную функцию. Это позволит модулям делать изменения, подстраиваясь под разное использование функции, а также упростит код. В Python 2.7 эта возможность активируется вводом from __future__ import print_function.

· Перемещение reduce (но не map или filter) из встроенного пространства в модуль functools (использование reduce существенно менее читабельно по сравнению с циклом).

· Удаление некоторых устаревших возможностей, поддерживаемых в ветке 2.x для совместимости, в частности: классы старого стиля, целочисленное деление с обрезанием результата как поведение по умолчанию, строковые исключения, неявный относительный импорт, оператор exec и т. п.

· Реорганизация стандартной библиотеки.

· Новый синтаксис для метаклассов.

Изменён синтаксис присваиваний. Стало возможным, например, присваивание a, *rest, b = range(5). С другой стороны, формальные параметры функций вроде def foo(a, (b, c)) более недопустимы.

Программный код

# Добавляем библиотеку для округления результатов

importmath

print( 'Калькулятор: Расчет номинала предохранителя в электрической сети.\n', '='*65, sep = '' )

while True:

# Выполняем сброс значений переменных

Pmax = 0; U = 0; Inom = 0; Save = 0; All = 0;

print( 'Введите значение максимальной мощности нагрузки (W): ', end = '' )

while True:

# В случае ошибки, перехват исключения

try:

Pmax = int( input( ) )

except ValueError:

print( 'Некорректное значение, повторите ввод (W): ', end = '' )

continue

else:

break

print( 'Введите значение напряжения сети (V): ', end = '' )

while True:

try:

U = int( input( ) )

except ValueError:

print( 'Некорректное значение, повторите ввод (V): ', end = '' )

continue

else:

break

Inom = round( Pmax / U )

Save = round( Pmax / 100 * 120 / U - Inom )

All = Inom + Save

print( '\nРешение: ', Pmax, 'W/', U, 'V=', Inom, 'А + ', Save, 'А (Запас прочности 20%)', sep = '' )

print( '\nС учётом нагрузки на сеть ', Pmax, 'W, и напряжением сети ', U, 'V,\nнеобходим предохранитель с номинальным напряжением не менее ', All, 'А.', sep = '' )

print( '\nПауза, для нового расчета номинала нажмите клавишу Enter\n', '='*65, sep = '', end ='' )

# Ввод данных в динамическую переменную, для создания паузы, предотвращающей закрытие консоли

input( )

Тестирование и отладка

Тестирование производилось на компьютере со следующими характеристиками и предустановленным программным обеспечением:

1. Процессор AMD Phenom II X2 550 Processor, 3.10 GHz;

2. Оперативная память 12 GB RAM;

3. Видеокарта AMD Radeon HD 5700;

4. Жёсткий диск 512 GB;

5. Операционная система Windows 10 Enterprise;

6. IDLE (Python 3)

Обязательным является IDLE (Python 3), так как программы, которые разрабатываются на нём без дополнительного программного обеспечения являются консольными приложениями, без собственного графического интерфейса.Первый запуск программы, при вводе некорректных исходных данных была обнаружена ошибка и приложение завершило свою работу досрочно, для её отладки был видоизменён программный код, в нём добавились циклы и перехватчики прерываний, они же отвечают за то, что происходит при возникновении ошибки в приложении (рис.1).

Рисунок 1. Результат успешного выполнения программного кода.

 

При втором запуске программы проблем в работе приложения, обнаружено не было. Программа от начала и до конца выполнила свою работу успешно (рис.2).

Рисунок 2. Результат неверно введённых исходных данных.


 

Заключение

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

Список использованной литературы

Книги:

1. Коэльё Л. П., Ричерт В. Построение систем машинного обучения на языке Python. — Перевод с английского. — М.: ДМК Пресс, 2015. — с. — ISBN 978-5-97060-330-7.

2. Маккинли У. Python и анализ данных. — Перевод с английского. — М.: ДМК Пресс, 2015. — 482 с. — ISBN 978-5-97060-315-4.

3. Марк Саммерфилд. Python на практике. — Перевод с английского. — М.: ДМК Пресс, 2014. — 338 с. — ISBN 978-5-97060-095-5.

4. Марк Лутц. Программирование на Python / Пер. с англ. — 4-е изд. — СПб.: Символ-Плюс, 2011. — Т. II. — ISBN 978-5-93286-211-7.

5. Марк Лутц. Программирование на Python / Пер. с англ. — 4-е изд. — СПб.: Символ-Плюс, 2011. — Т. I. — 992 с. — ISBN 978-5-93286-210-0.

6. Марк Лутц. Изучаем Python, 4-е издание. — Перевод с английского. — СПб.: Символ-Плюс, 2010. — 1280 с — ISBN 978-5-93286-159-2

7. Дэвид М. Бизли. Python. Подробный справочник, 4-е издание. — Перевод с английского. — СПб.: Символ-Плюс, 2010. — 864 с — ISBN 978-5-93286-157-8

8. Марк Саммерфилд. Программирование на Python 3. Подробное руководство. — Перевод с английского. — СПб.: Символ-Плюс, 2009. — 608 с — ISBN 978-5-93286-161-5

9. Ноа Гифт, Джереми М. Джонс. Python в системном администрировании UNIX и Linux. — Перевод с английского. — СПб.: Символ-Плюс, 2009. — 512 с — ISBN 978-5-93286-149-3

10. Бизли, Дэвид М. Язык программирования Python. Справочник. — К.: ДиаСофт, 2000. — 336 с. — ISBN 966-7393-54-2, ISBN 0-7357-0901-7

11. Сузи Р. А. Python. Наиболее полное руководство (+CD). — СПб.: БХВ-Петербург, 2002. — 768 с. — ISBN 5-94157-097-X

12. Сузи Р. А. Язык программирования Python: Учебное пособие. — М.: ИНТУИТ, БИНОМ. Лаборатория знаний, 2006. — 328 с. — ISBN 5-9556-0058-2, ISBN 5-94774-442-2

13. Доусон М. Программируем на Python. — СПб.: Питер, 2012. — 432 с. — ISBN 978-5-459-00314-7.

14. С. Шапошникова. Основы программирования на Python. Учебник. Вводный курс. — версия 2. — 2011. — 44 с.

15. И. А. Хахаев. Практикум по алгоритмизации и программированию на Python. Учебник. — М.: Альт Линукс, 2010. — 126 с. — (Библиотека ALT Linux). — ISBN 978-5-905167-02-7.

Веб-документ:

16. Введение. [Электронный ресурс]

http://leg.co.ua/knigi/oborudovanie/elektricheskie-apparaty-6.html

17. Электрический предохранитель. [Электронный документ]

https://ru.wikipedia.org/wiki/Электрический_предохранитель

18. Анализ предметной области. [Электронный ресурс]

http://www.megadomoz.ru/article/835/218/

19. Python. [Электронный документ]

https://ru.wikipedia.org/wiki/Python

20. Формулы. [Электронный документ]http://rcl-radio.ru/?p=20446

Приложение

Установочный пакет «python-3», необходимо установить данную IDE, для обеспечения работоспособности разработанного программного продукта.

Файл «calc-rnp.py» является готовым программным продуктом.


Дата добавления: 2018-04-15; просмотров: 6351; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!