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

Что такое программирование?

Парадигмы программирования это наборы принципов и методик

Основные парадигмы программирования

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

Программирование это достаточно сложный процесс, включающий в себя следующие этапы:

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

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

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

В зависимости от принципа создания программы различают:

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

В зависимости от принципа декомпозиции(разделения задачи на части) различают следующие парадигмы программирования:

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

В зависимости от предмета приложения различают следующие виды программирования:

  • системное программирование, связанное с разработкой операционных систем(драйверов), систем разработки программного обеспечения(компиляторов, отладчиков и т.п.);
  • сетевое программирование это процесс создание программных систем, которые будут работать в существующей локальной, корпоративной или глобальной сети;
  • прикладное программирование — процесс создание программных продуктов, предназначенных для решения прикладных задач бизнеса, IТ- технологии и т.п.;
  • Web-программирование — написание кода на специальных “скриптовых языках” для использования в веб-браузерах или на Web-серверах, предназначенного для создание страниц сайтов, блогов и т.п.;
  • мобильное программирование — написание кода на специальных языках для мобильных приложений, под мобильные операционные системы и платформы.

Другие виды парадигмы программирования, которых сегодня достаточно много, в данной статье рассматривать не будем. Остановимся на перечислении. Основные виды или парадигмы программирования: процедурное, операторное, функциональное, логическое, структурное (модульное), объектно-ориентированное,графическое, экстремальное, декларативное; логическое и др.

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

Программы это алгоритмы и структуры данных, как сказал один из основателей языков программирования Никлаус Вирт, реализованные на определенном языке программирования. Основными видами современных языков программирования являются:

  • языки типа ассемблера — используются при низкоуровневом программировании;
  • алгоритмические – используются при сетевом и прикладном программировании;
  • скриптовые — для создания Web-приложений;
  • мобильные, предназначенные для кодирования приложений, используемых в мобильных устройствах.

Сегодня на практике наиболее распространенными являются алгоритмические языки программирования Python, С, С++, C# и Java, а также скриптовые языки JavaScript и РНР.

Какими навыками надо владеть программисту

Программы это алгоритмы и структуры данных, которые должен хорошо знать программист и уметь ими пользоваться. Нельзя программирование сводить только к кодированию программы. Кодеровщик и программист кардинально отличаются друг от друга. Отличие между «кодеровщиком» и «программистом» похоже на различие между наукой и псевдонаукой, скажем алхимией и химией. Разница между программистом и кодеровщиком довольно простая: задача кодеровщика — написать код, задача программиста — создать программу и это не одно и то же.

В программировании нужно мыслить своеобразно: строить алгоритмы, мыслить аналитически и структурировано. Фраза Никлауса Вирта о том, что «программы это алгоритмы и структуры данных» не просто фраза, а концепция программирования. Очень важно любить математику и уметь с ней работать. Если таковы качества есть, то можно приступать.

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

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

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

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

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

В-пятых, язык и алгоритмы это хорошо, но за ними всегда стоит платформа исполнения программы и область применения. Поэтому выбирать и изучать нужно не только язык, но и платформу. При этом следует различать платформу, как среду разработки программ, и платформу, как среду выполнения программ. Да, в начале пути лучше выбрать ту платформу и область применения, в которой быстрее можно получить результат. Но в конечном итоге от платформы многое зависит. Особенно от платформы, как среды выполнения программы.

Это очень краткое, конспективное изложения того, что надо знать и уметь программисту. Но его достаточно, чтобы начать. Со временем сама жизнь покажет, что надо знать и уметь. Главное надо уметь учиться быстро и глубоко. К сожалению программистом может быть не каждый, но программировать может любой.

Что такое процедурное программирование?

В основе процедурного, операторного и функционального типов программирования лежат процедуры, операторы и функции, используемые как основные объекты языка.

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

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

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

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

Для грамотного применения процедур и функций при построении программы необходимо хорошо знать способы:

  • объявления процедур и функций в данном алгоритмическом языке;
  • объявления формальных и способы передачи фактических аргументов в процедуры и функции;
  • возврата  значений — результатов выполнения процедуры и функции.

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

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

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

Использование простых структур(типов) данных и процедурного программирования при обработке сложных структур данных крайне не рационально. Поэтому при обработке сложных(структурированных) типов данных необходимо использование объектно-ориентированного(объектного) программирования. Что же такое объектно-ориентированное программирование? Каковы алгоритмы и структуры данных в этом случае примеряются в программах.

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

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

Объектное программирование характеризуется еще также тем, что в его программах реализуются три принципа:

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

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

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

Что такое аспектно-ориентированное программирование

Традиционные парадигмы процедурного и объектно-ориентированного программирования используют при проектировании программы функциональную или объектную декомпозицию задачи и не позволяют локализовать, так называемую сквозную функциональность в отдельных модулях.

Функциональность называется сквозной (scattered — разбросанный, tangled — переплетённый), погтому что её реализация распределена по различным модулям программы. Типичными примерами сквозной функциональности являются: ведение лога(журнала), обработка исключений, трассировка, аутентификация и проверка прав доступа, оценка производительности информационной системы и т.п. На помощь приходит аспектно-ориентированный подход.

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

Все языки АОП предоставляют средства для выделения сквозной функциональности в отдельную сущность.

Основные понятия АОП:

  • Аспект — модуль или класс, реализующий сквозную функциональность. Аспект изменяет поведение остального кода, применяя совет в точках соединения, определённых некоторым срезом.
  • Совет  — средство оформления кода, которое должно быть вызвано из точки соединения. Совет может быть выполнен до, после или вместо точки соединения.
  • Точка соединения — точка в выполняемой программе, где следует применить совет. Многие реализации АОП позволяют использовать вызовы методов и обращения к полям объекта в качестве точек соединения.
  • Срез — набор точек соединения. Срез определяет, подходит ли данная точка соединения к данному совету. Самые удобные реализации АОП используют для определения срезов синтаксис основного языка (например, в AspectJ применяются Java-сигнатуры) и допускают их повторное использование с помощью переименования и комбинирования.
  • Внедрение  — изменение структуры класса и/или изменение иерархии наследования для добавления функциональности аспекта в инородный код. Обычно реализуется с помощью некоторого метаобъектного протокола.

АОП можно поддерживать в рамках уже существующих языков. Так, в частности, исследовательский центр Xerox PARC разработал систему AspectJ, поддерживающую АОП в рамках языка Java.

Заключение

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

Парадигмы программирования это набор принципов и методик написания кода программы на основе алгоритмов обработки структур данных.

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

Наиболее востребованными являются профессионалы по разработке прикладных программных продуктов на языках Python, С++, C# и Java, а также специалисты в области web — программирования на языках JavaScript, РНР и том же Python, растет потребность и в таких относительно новых направлениях как обработка больших данных(Big Data), машинное обучение и искусственный интеллект.

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

Смотрите также…

  1. Онлайн школы и курсы программирования
  2. Как изучать алгоритмы решения задач?
  3. Как изучать простые типы данных языка программирования?
Кто хочет своевременно узнавать о выходе новой статьи на сайте должен подписаться.

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

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

Дистанционное обучение
Обучение программированию
Проектирование информационных систем
 

brasm

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

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

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