Парадигмы программирования

Вы наверняка не раз слышали словосочетания «процедурное программирование», «объектно-ориентированное программирование» и «функциональное программирование». Всё это обозначения различных парадигм (стилей) программирования. Есть целый зоопарк «различных программирований».

Парадигма программирования — это совокупность идей и понятий, определяющих стиль написания компьютерных программ.

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

Перечислим их с короткими пояснениями:

ИМПЕРАТИВНОЕ

программа = последовательность действий, связанных условными и безусловными переходами

ПРОЦЕДУРНОЕ

программа = последовательность процедур, каждая из которых есть последовательность элементарных действий и вызовов процедур, структурированных с помощью структурных операторов if, for и while

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ

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

ФУНКЦИОНАЛЬНОЕ

программа = система определений функций, описание того, что нужно вычислить, а как это сделать — решает транслятор; последовательность действий не прослеживается

ПРОДУКЦИОННОЕ (ЛОГИЧЕСКОЕ)

программа = система определений и правил вида «условие => новый факт»

СЕНТЕНЦИАЛЬНОЕ

программа = система правил вида «шаблон => трансформирующее действие»

СОБЫТИЙНОЕ

программа = система правил вида «событие => новые события» + диспетчер событий

АВТОМАТНОЕ

программа = конечный автомат или автомат специального типа

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

Структурное (директивное) программирование

Некоторые представители: Fortran, Pascal, C.

Директивная (структурная) программа предписывает, как достичь результата, пошагово описывая действия. Поэтому такое программирование является достаточно легким для понимания. В структурном программировании от входных данных полностью зависит последовательность выполнения команд.

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

Представители функциональных языков: List, Haskell.

Представитель логических языков: Prolog.

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

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

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

Объектно-ориентированное программирование

Представители объектно-ориентированных языков: С++, Java.

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

Особое внимание уделяется данным, которые представляются в программе в виде объектов. Объекты взаимодействуют между собой с помощью механизма передачи сообщений. Задача программиста – реализовать такие объекты, при взаимодействии которых можно будет получать желаемый результат.

Класс — совокупность свойств, методов и событий.

Объект — это инкапсулированная абстракция с четко определенным интерфейсом.

Что означает «совокупность»? Это значит, что класс как бы состоит из методов, свойств и событий, и они обеспечивают его полноценную работу. Представим себе кнопку. Она обладает:

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

Если все это объединить, то получается автономный класс, который может работать в различных условиях. В этом случае достаточно только установить кнопку на форме, и она уже готова к применению. Как же оформляются свойства, методы и события класса в программах?

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

В основе ООП лежат такие понятия как наследование, полиморфизм и инкапсуляция.

Инструменты имитационного моделирования

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

AnyLogic

AnyLogic — ведущий инструмент имитационного моделирования для бизнеса. Используется по всему миру в логистике, производстве, нефтегазовой отрасли, и др.

Сервисы-помощники в решении домашних заданий

Школьные Знания.com

Znanija.com — образовательной социальной сети для школьников и студентов. На Znanija.com и в мобильном приложении Вы можете задать вопрос, относящийся к любому школьному предмету: математике, алгебре, геометрии, русскому языку и литературе, английскому языку, истории, физике, химии, географии, обществознанию и так далее.

Как узнать список запущенных процессов в Linux?

Для этого надо открыть терминал и выполнить одну из команд.

Для получения основных сведений о процессах, запущенных текущим пользователем:

# ps -la

Основные сведения о процессах, запущенных всеми пользователями:

# ps -ela

Базовая информация о процессах для текущего пользователя:

# ps -a

Ресурсы по обучению английскому языку

Lingualeo

Lingualeo — это эффективный сервис для нескучного изучения английского языка. Более 18 000 000 человек во всем мире выбрали Lingualeo.

Duolingo

Учиться с Duolingo весело и интересно. Зарабатывайте очки за правильные ответы, решайте задачи на время, повышайте свой уровень.

Busuu

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

Skyeng

Онлайн-школа Skyeng — доступное дистанционное обучение английскому языку через интернет на собственной образовательной платформе (как по Skype, только удобнее).

Ресурсы по обучению разработки игр

UNITY3DSCHOOL

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

ege

Сервисы по подготовке к ЕГЭ и ОГЭ

Образовательный центр MAXIMUM

Как-то давно мне на глаза попался этот сервис, который представляет собой подготовку к ЕГЭ и ОГЭ онлайн и в классе. Делюсь им с вами.

Если знаете ещё какие-нибудь интересные сервисы, пишите в комментариях.

Антивирусы

Лаборатория Касперского

Надежный антивирус и другие защитные решения для дома и бизнеса. Продукты «Лаборатории Касперского» защитят ваши устройства от вирусов и онлайн угроз.

Dr.Web

«Доктор Веб» – российский разработчик антивирусных программ и сервисов для предоставления услуг информационной защиты для корпоративных и частных пользователей.

ESET NOD32

ESET NOD32 — эксперт в области защиты от киберпреступности и компьютерных угроз. Миллионы пользователей выбирают антивирусы ESET за их надежность и высокий уровень защиты.

TCP-IP

Стек протоколов TCP/IP — набор сетевых протоколов передачи данных, используемых в сетях, включая сеть Интернет. Название TCP/IP происходит из двух наиважнейших протоколов семейства — Transmission Control Protocol (TCP) и Internet Protocol (IP), которые были разработаны и описаны первыми в данном стандарте.

Протоколы работают друг с другом в стеке (англ. stack, стопка) — это означает, что протокол, располагающийся на уровне выше, работает «поверх» нижнего, используя механизмы инкапсуляции. Например, протокол TCP работает поверх протокола IP.

Протоколы этих уровней полностью реализуют функциональные возможности модели OSI. На стеке протоколов TCP/IP построено всё взаимодействие пользователей в IP-сетях. Стек является независимым от физической среды передачи данных.

Уровень

Пример

1

Канальный

Ethernet, IEEE 802.11 Wireless Ethernet, SLIP, Token Ring, ATM

2

Сетевой

TCP/IP это IP

3

Транспортный

TCP, UDP, SCTP, DCCP

4

Прикладной

HTTP, RTSP, FTP, DNS

Теперь рассмотрим подробнее эти уровни.

Канальный

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

Примеры протоколов канального уровня — Ethernet, IEEE 802.11 Wireless Ethernet, SLIP, Token Ring, ATM.

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

Сетевой

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

Транспортный

Протоколы транспортного уровня могут решать проблему негарантированной доставки сообщений («дошло ли сообщение до адресата?»), а также гарантировать правильную последовательность прихода данных. В стеке TCP/IP транспортные протоколы определяют, для какого именно приложения предназначены эти данные.

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

TCP — «гарантированный» транспортный механизм с предварительным установлением соединения, предоставляющий приложению надёжный поток данных, дающий уверенность в безошибочности получаемых данных, перезапрашивающий данные в случае потери и устраняющий дублирование данных.

TCP позволяет регулировать нагрузку на сеть, а также уменьшать время ожидания данных при передаче на большие расстояния. Более того, TCP гарантирует, что полученные данные были отправлены точно в такой же последовательности. В этом его главное отличие от UDP.

UDP протокол передачи датаграмм без установления соединения. Также его называют протоколом «ненадёжной» передачи, в смысле невозможности удостовериться в доставке сообщения адресату, а также возможного перемешивания пакетов. В приложениях, требующих гарантированной передачи данных, используется протокол TCP.

UDP обычно используется в таких приложениях, как потоковое видео и компьютерные игры, где допускается потеря пакетов, а повторный запрос затруднён или не оправдан, либо в приложениях вида запрос-ответ (например, запросы к DNS), где создание соединения занимает больше ресурсов, чем повторная отправка.

И TCP, и UDP используют для определения протокола верхнего уровня число, называемое портом.

Прикладной

На прикладном уровне работает большинство сетевых приложений. Эти программы имеют свои собственные протоколы обмена информацией, например, HTTP (протокол передачи гипертекста) для WWW (World Wide Web), FTP (передача файлов), SMTP (электронная почта), SSH (безопасное соединение с удалённой машиной), DNS (преобразование символьных имён в IP-адреса) и многие другие. В массе своей эти протоколы работают поверх TCP или UDP и привязаны к определённому порту.

Сравнение с моделью OSI

Существуют разногласия в том, как вписать модель TCP/IP в модель OSI, поскольку уровни в этих моделях не совпадают.

К тому же, модель OSI не использует дополнительный уровень — «Internetworking» — между транспортным и сетевым уровнями.