Билеты
.pdf1 Концепция структурного программирования. Причины появления концепции. Модульность и функции. Ограничения на логические конструкции. Использование оператора goto.
Структу́рное программи́рование — парадигма программирования, в
основе которой лежит представление программы в виде иерархической структуры блоков.
В соответствии с парадигмой, любая программа, которая строится без использования оператора goto, состоит из трёх базовых управляющих конструкций: последовательность, ветвление, цикл; кроме того, используются подпрограммы. При этом разработка программы ведётся пошагово, методом
«сверху вниз».
Методология структурного программирования появилась как следствие возрастания сложности решаемых на компьютерах задач, и
соответственно, усложнения программного обеспечения.
Первоначально идея структурного программирования появилась на свет в связи с оператором goto и сомнениями в целесообразности его применения.
Структурное программирование призвано, в частности, устранить беспорядок и ошибки в программах, вызванные трудностями чтения кода,
несистематизированным, неудобным для восприятия и анализа исходным текстом программы. Такой текст нередко характеризуют как «спагетти-код».
Код с goto трудно форматировать, так как он может нарушать
иерархичность выполнения (парадигму структурного программирования) и потому отступы, призванные отображать структуру программы, не всегда могут быть выставлены правильно. Кроме того,
оператор goto мешает оптимизации компиляторами управляющих
структур.
Цель |
структурного |
программирования: |
повысить |
производительность труда программистов, в том числе при разработке
больших и сложных программных комплексов, сократить число ошибок,
упростить отладку, модификацию и сопровождение программного
обеспечения.
Теорема о структурном программировании (Теорема Бёма — Якопини)
Любая программа, заданная в виде блок-схемы, может быть представлена с помощью трёх управляющих структур:
последовательность — обозначается: f THEN g
ветвление — обозначается: IF p THEN f ELSE g
цикл — обозначается: WHILE p DO f,
где f, g — блок-схемы с одним входом и одним выходом, р — условие,
THEN, IF, ELSE, WHILE, DO — ключевые слова. Пояснение. Формула f THEN g означает следующее: сначала выполняется программа f, затем выполняется программа g
Подпрограмма (функция, процедура). Исторически сруктурное программирование тесно связано с технологией процедурного программирования, когда сложная программа строится по иерархической структуре в виде дерева функций (подпрограмм, процедур), вызывающих друг друга и обменивающихся данными через списки входных и выходных параметров.
Главная функция подпрограммы – структуризация программы.
Любое изменение (исправление ошибки, оптимизация, расширение функциональности), сделанное в подпрограмме, автоматически отражается на всех её вызовах, в то время как при дублировании каждое изменение необходимо вносить в каждое вхождение изменяемого кода.
2 Основные понятия концепции объектно-ориентированного программирования. Причины появления концепции. Объект или класс.
Отличие класса от функции. Понятия абстракции, инкапсуляции,
полиморфизма, наследования.
Недостатки структурного программирования:
Концепция структурного программирования является цельной и самодостаточной. Как таковых, недостатков у нее фактически нет.
Но: эта концепция идеологически тесно связана с процедурным програмированием. В рамках такого подхода чрезвычайно затруднительно
(по трудоемкости) создание очень крупных программных комплексов,
способных эффективно загрузить ресурсы современного компьютера.
Проблемы:
−сложность и неудобство создания новых программ на основе ранее разработанных (необходимость разбираться в исходных программах и в списках параметров);
−сложность и громоздскость манипуляций со сложными объектами
ииспользования укрупненных функций (сложные объекты или функции приходится описывать через громоздкие структуры, содержащие многочисленных параметры);
−сложность организации многозадачного или многоканального режима обработки данных (многозадачность или многоканальность приходится прописывать в коде программ в явном виде, что очень усложняет
иувеличивает код).
Для решения перечисленных проблем была разработана новая
концепция, получившая название «Объектно-ориентированное
программирование».
Концепция структурного программирования тем не менее остается очень важным базовым принципом.
Объект (класс) – совокупность программного кода и связанных с ним данных, реализующая единую функцию.
Определение класса – программный код, описание логики функционирования.
Экземпляр класса – выделенное в памяти компьютера пространство для размещения данных, связанных с отдельным вызовом класса.
Основные понятия
Абстракция данных. Абстрагирование означает выделение значимой информации и исключение из рассмотрения незначимой. В ООП рассматривают лишь абстракцию данных (нередко называя её просто
«абстракцией»), подразумевая набор наиболее значимых характеристик объекта, доступных остальной программе. Абстракция связана с понятием
«Черный ящик» - система, описанная только выполняемой функцией, входами и выходами. Инкапсуляция
Инкапсуляция — свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе. Сокрытие внутренних данных класса.
Ограничение доступа внешних программ к данным класса (private,public, protected).
Наследование — свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование,
называется базовым, родительским или суперклассом. Новый класс — потомком, наследником, дочерним или производным классом. Доступ производных классов к методам и свойствам родительского.
Полиморфизм — свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Встроенный полиморфизм языков программирования
(одинаковые знаки арифметических операций для разных типов чисел).
Полиморфизм данных, операторов, методов.
3 Платформа .NET Framework. Многоязыковое программирование.
Кроссплатформенность ПО. Web-ориентированные приложения.
.NET Framework — это программная платформа, выпущенная компанией Microsoft, которая подходит для разных языков программирования.
ASP.NET — технология создания веб-приложений и веб-сервисов от компании Microsoft.
Фреймворк .NET представляет мощную платформу для создания приложений.
Можно выделить следующие ее основные черты:
• Поддержка нескольких языков. Основой платформы является общеязыковая среда исполнения Common Language Runtime (CLR), благодаря чему .NET поддерживает несколько языков. При компиляции код на любом из этих языков компилируется в сборку на общем языке CIL (Common
Intermediate Language) - своего рода ассемблер платформы .NET. Поэтому при определенных условиях мы можем сделать отдельные модули одного приложения на отдельных языках. Например, служба, написанная на C++ для
Microsoft .NET, может обратиться к методу класса из библиотеки, написанной на Delphi; на C# можно написать класс, наследованный от класса, написанного на Visual Basic .NET, а исключение, созданное методом, написанным на C#,
может быть перехвачено и обработано в Delphi.
• Кроссплатформенность. .NET является переносимой платформой (с
некоторыми ограничениями). Например, последняя версия платформы на данный момент - .NET 5 поддерживается на большинстве современных ОС
Windows, MacOS, Linux. Используя различные технологии на платформе
.NET, можно разрабатывать приложения для самых разных платформ - Windows, MacOS, Linux, Android, iOS, Tizen.
•Мощная библиотека классов. .NET представляет единую для всех поддерживаемых языков библиотеку классов. И какое бы приложение мы не собирались писать - текстовый редактор, чат или сложный веб-сайт - так или иначе мы задействуем библиотеку классов .NET.
•Разнообразие технологий. Общеязыковая среда исполнения CLR и
базовая библиотека классов являются основой для целого стека технологий,
которые разработчики могут задействовать при построении тех или иных приложений. Например, для работы с базами данных в этом стеке технологий предназначена технология ADO.NET и Entity Framework Core. Для построения графических приложений с богатым насыщенным интерфейсом - технология
WPF и UWP, для создания более простых графических приложений - Windows
Forms. Для разработки мобильных приложений - Xamarin. Для создания веб-
сайтов и веб-приложений - ASP.NET и т.д.
• Производительность. Согласно ряду тестов веб-приложения на .NET 5 в ряде категорий сильно опережают веб-приложения, построенные с помощью других технологий. Приложения на .NET 5 в принципе отличаются высокой производительностью.
Также еще следует отметить такую особенность языка C# и фреймворка
.NET, как автоматическая сборка мусора. Общеязыковая среда CLR сама вызовет сборщик мусора и очистит память.
4 Динамическая компиляция. Основные технологии построения ПО (понятия интерпретации, компиляции, динамической компиляции).
Универсальный промежуточный язык программирования. Байт-код.
Общеязыковая исполняющая среда (CLR). Понятие сборки. Компоненты сборки. JIT компилятор.
Методы построения программ В наиболее общем виде можно выделить три основных метода:
1)Построение предварительно компилированных программ. При этом исполняемая программа переводится на внутренний язык компьютера и полностью строится до ее выполнения.
2)Работа программ в режиме интерпретации. Операторы программы переводятся на внутренний язык компьютера непосредственно в ходе ее выполнения, оператор за оператором (BASIC, MATLAB).
3)Работа программ в режиме динамической компиляции. Каждая часть программы предварительно преобразуется в код на промежуточном языке программирования. В ходе выполнения необходимые модули компилируются во внутренний язык компьютера и затем выполняются.
Преимущества технологии динамической компиляции
•Относительная лёгкость освоения и работы с языками, так как большинство .Net языков – языки высшего уровня.
•Быстрота выполнения конечных исполняемых файлов.
•Исполняющая среда может собирать статистику о работающей программе и производить оптимизации с учётом этой информации.
•Исполняющая среда может контролировать выполнение байт-кода после компиляции, поэтому приложение может быть запущено в «песочнице»
•Приложения, написанные на .net сами чистят себя в оперативной памяти, благодаря автоматическому «сборщику мусора».
•Приложение нужно собрать всего один раз, и оно будет работать на всех платформах процессоров и операционных системах семейства Windows.
При этом приложение будет показывать весь свой потенциал скорости,
который возможен на определённых процессорах.
Песочница (sandbox) — специально выделенная (изолированная) среда для безопасного исполнения компьютерных программ. Обычно представляет собой жёстко контролируемый набор ресурсов для исполнения гостевой программы — например, место на диске или в памяти. Доступ к сети,
возможность сообщаться с главной операционной системой или считывать информацию с устройств ввода обычно либо частично эмулируют, либо сильно ограничивают.
Сборка мусора (garbage collection) — одна из форм автоматического управления памятью. Специальный процесс, называемый сборщиком мусора
(garbage collector), периодически освобождает память, удаляя объекты,
которые уже не будут востребованы приложениями.
Common Intermediate Language (сокращённо CIL) —
«высокоуровневый ассемблер» виртуальной машины .NET. Промежуточный
язык, разработанный фирмой Microsoft для платформы .NET Framework.
Прежнее название MSIL (Microsoft Intermediate Language) JIT-
компилятор CIL является частью CLR (common language runtime) — общей среды выполнения программ, написанных на языках .NET.
Все компиляторы, поддерживающие платформу .NET, должны транслировать код с языков высокого уровня платформы на язык CIL.
Общеязыковая исполняющая среда
Common Language Runtime (CLR — общеязыковая исполняющая среда) — исполняющая среда для байт-кода CIL, в который компилируются программы, написанные на .NET-совместимых языках программирования (C#, Managed C++, Visual Basic .NET, F# и прочие).
CLR компилирует код приложения на языке CIL во время его исполнения, а также предоставляет CIL-программам (а следовательно, и
программам, написанным на языках высокого уровня, поддерживающих .NET Framework) доступ к библиотеке классов .NET Framework, (Framework Class
Library).
JIT-компиляция (Just-In-Time compilation, компиляция «на лету»),
динамическая компиляция — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код непосредственно во время работы программы.
Сборка .NET
Сборка в терминологии .NET ( assembly) — двоичный файл (exe или dll),
содержащий номер версии информационного продукта, метаданные и инструкции для виртуальной машины .NET.
Файл с исходным кодом, написанном на любом языке поддерживаемой
.NET платформой (C#, VB.NET...), с помощью соответствующего компилятора компилируется в сборку.
Манифест - имя сборки, номер версии, список всех файлов сборки (для многофайловых сборок), ссылки на файлы с определением типов, ссылки на используемые сборки.
Метаданные типов - описывают все классы и члены классов,
определённые в сборке, а также классы и члены классов, которые текущая сборка вызывает из другой сборки.
CIL-код (байт-код) – программный код на промежуточном языке.
Ресурсы - любые неисполняемые данные, которые логически развертываются вместе с приложением.
Код компилируется в приложения или сборки с расширениями exe или dll на языке CIL. Далее при запуске на выполнение подобного приложения происходит JIT-компиляция (Just-In-Time) в машинный код, который затем выполняется. При этом, поскольку наше приложение может быть большим и содержать кучу инструкций, в текущий момент времени будет компилироваться лишь та часть приложения, к которой непосредственно идет обращение. Если мы обратимся к другой части кода, то она будет скомпилирована из CIL в машинный код. При том уже скомпилированная часть приложения сохраняется до завершения работы программы. В итоге это повышает производительность.
5 Построение приложения Windows в интегрированной среде
программирования
MS Visual Studio
Это было в лекции к этой теме