29
Programming Concepts Основные понятия о программировании

Programming Concepts

Embed Size (px)

DESCRIPTION

Programming concepts basics in russian language

Citation preview

Page 1: Programming Concepts

Programming Concepts Основные понятия о программировании

Page 2: Programming Concepts

Programming Languages

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

Компилируемые/Интерпретируемые Компилируемый язык программирования — язык

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

1

Page 3: Programming Concepts

Programming Languages Интерпретируемый язык программирования — язык

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

Декларативные/Императивные Декларативные языки программирования — это языки

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

2

Page 4: Programming Concepts

Programming Languages Типичным примером таких языков являются языки логического

программирования (языки, основанные на системе правил). В программах на языках логического программирования

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

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

Наиболее распространённым языком логического программирования является язык Пролог.

Императивный язык должен описывать не столько саму задачу

(описание, «ЧТО» нужно получить), сколько её решение («КАК»

3

Page 5: Programming Concepts

Programming Languages получить). Эта парадигма программирования, которая, в отличие от

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

Системы Типизации Системы типизации в достаточной степени развиты в современных

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

4

Page 6: Programming Concepts

Programming Paradigms Парадигма программирования — это система идей и понятий,

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

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

5

Page 7: Programming Concepts

Programming Paradigms Событийно-ориентированное программирование Парадигма программирования, в которой выполнение программы

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

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

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

Событийно-ориентированное программирование, как правило, применяется в трех случаях:

6

Page 8: Programming Concepts

Programming Paradigms при построении пользовательских интерфейсов (в том числе

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

причинам нежелательно порождение обслуживающих процессов; при программировании игр, в которых осуществляется управление

множеством объектов. Объектно-ориентированное, или объектное, программирование (в

дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов.

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

Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной

7

Page 9: Programming Concepts

Programming Paradigms ориентированности — для этого требуется наличие наследования. Но даже наличие инкапсуляции и наследования не делает язык

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

Процедурное (императивное) программирование является отражением

архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием Машина Тьюринга.

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

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

8

Page 10: Programming Concepts

Programming Paradigms программист определяет языковые конструкции для выполнения

последовательности алгоритмических шагов.

9

Page 11: Programming Concepts

Data Types Тип данных — фундаментальное понятие теории программирования.

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

Класс в программировании — набор методов и функций. Суть отличия

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

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

10

Page 12: Programming Concepts

Data Types добавиться константы, атрибуты и внешние определения. Как и поля, код в виде методов/функций/процедур, принадлежащих

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

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

11

Page 13: Programming Concepts

Data Types специальный класс «тип данных», экземпляры которого описывают тот

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

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

12

Page 14: Programming Concepts

Data Types Почти каждому члену класса можно установить модификатор доступа (за

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

private (закрытый, внутренний член класса) — обращения к члену допускаются только из методов того класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену. Наследование по типу private запрещает доступ из дочернего класса ко всем членам родительского класса, включая даже public-члены (С++);

protected (защищённый, внутренний член иерархии классов) — обращения к члену допускаются из методов того класса, в котором этот член определён, а также из любых методов его классов-наследников. Наследование по типу protected делает все public-члены родительского класса protected-членами класса-наследника (С++);

public (открытый член класса) — обращения к члену допускаются из любого кода. Наследование по типу public не меняет модификаторов родительского класса (С++);

13

Page 15: Programming Concepts

Data Types Определение класса на языке Java с помощью оператора class: class MyClass { String name = "Example"; // "Конструктор" public MyClass(String name) { this.name = name; } // "Метод" public String getName() { return name; } } Создание экземпляра класса: MyClass my = new MyClass("Example 2");

14

Page 16: Programming Concepts

Programming Constructs Flow Control (Управление потоком передачи данных) — в

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

Различают два способа: аппаратный (CTS/RTS) или программный (XOn/XOff).

Предпочтительно использовать аппаратное управление потоком. Для этого нужно выбрать соответствующий пункт в меню терминальной программы и проинициализировать модем для работы с Hardware Flow Control.

Логическое выражение в программировании — конструкция языка

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

Инструкция или оператор (англ. statement) — наименьшая

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

15

Page 17: Programming Concepts

Programming Constructs Переменная — поименованная, либо адресуемая иным способом область

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

Область видимости переменной — понятие в некоторых языках программирования. Оно определяет места в исходном коде программы, в которых может использоваться данная переменная.

По области видимости переменные делятся на: локальные (которые «видны» внутри данной структуры — файла, подпрограммы или оператора) и глобальные (которые «видны» во всей программе). В некоторых языках появились ещё и общие переменные.

Область видимости переменной может задаваться с помощью классов памяти или пространства имён.

В C++ область доступа поля класса можно задавать с помощью ключевых слов public, private и protected.

16

Page 18: Programming Concepts

Algorithms Алгоритм – это точное предписание, определяющее вычислительный

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

Парсинг (синтаксический анализ) — это процесс сопоставления линейной

последовательности лексем (слов, токенов) языка с его формальной грамматикой. Результатом обычно является дерево разбора (синтаксическое дерево). Обычно применяется совместно с лексическим анализом. Синтаксический анализатор (парсер) — это программа или часть программы, выполняющая синтаксический анализ.

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

17

Page 19: Programming Concepts

Concurrent Programming Параллельные вычисления — такой способ организации компьютерных

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

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

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

Потоки и процессы — это связанные понятия в вычислительной технике.

18

Page 20: Programming Concepts

Concurrent Programming Оба представляют из себя последовательность инструкций, которые должны

выполняться в определенном порядке. Инструкции в отдельных потоках или процессах, однако, могут выполняться параллельно.

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

Существование нескольких процессов позволяет компьютеру "одновременно" выполнять несколько задач. Существование нескольких потоков позволяет процессу разделять работу для параллельного выполнения. На многопроцессорном компьютере процессы или потоки могут работать на разных процессорах. Это позволяет выполнять реально параллельную работу.

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

19

Page 21: Programming Concepts

Concurrent Programming Состояние гонки (англ. race condition) — ошибка проектирования

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

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

20

Page 22: Programming Concepts

Productivity and Quality Отладка (Debugging) — этап разработки компьютерной программы, на

котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится:

узнавать текущие значения переменных; выяснять, по какому пути выполнялась программа. Существуют две взаимодополняющие технологии отладки. Использование отладчиков — программ, которые включают в себя

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

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

Интегрированная среда разработки, ИСР (англ. IDE, Integrated development environment или integrated debugging environment) — система программных средств, используемая программистами для разработки программного обеспечения (ПО).

21

Page 23: Programming Concepts

Productivity and Quality Обычно среда разработки включает в себя: текстовый редактор компилятор и/или интерпретатор средства автоматизации сборки отладчик. Иногда содержит также средства для интеграции с системами управления

версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Многие современные среды разработки также включают браузер классов, инспектор объектов и диаграмму иерархии классов — для использования при объектно-ориентированной разработке ПО. Хотя и существуют ИСР, предназначенные для нескольких языков программирования — такие, как Eclipse, NetBeans, Embarcadero RAD Studio, Qt Creator или Microsoft Visual Studio, но обычно ИСР предназначается для одного определённого языка программирования - как, например, Visual Basic, Delphi, Dev-C++.

Частный случай ИСР — среды визуальной разработки, которые включают в себя возможность визуального редактирования интерфейса программы.

22

Page 24: Programming Concepts

Productivity and Quality Система управления версиями (от англ. Version Control System, VCS или

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

Такие системы наиболее широко используются при разработке программного обеспечения для хранения исходных кодов разрабатываемой программы. Однако они могут с успехом применяться и в других областях, в которых ведётся работа с большим количеством непрерывно изменяющихся электронных документов. В частности, системы управления версиями применяются в САПР, обычно в составе систем управления данными об изделии (PDM). Управление версиями используется в инструментах конфигурационного управления (Software Configuration Management Tools).

23

Page 25: Programming Concepts

Relational Database System Реляционная СУБД (РСУБД; иначе Система управления реляционными

базами данных, СУРБД) — СУБД, управляющая реляционными базами данных.

Понятие реляционный (англ. relation — отношение) связано с разработками известного английского специалиста в области систем баз данных Эдгара Кодда (Edgar Codd).

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

Реляционная модель ориентирована на организацию данных в виде двумерных таблиц. Каждая реляционная таблица представляет собой двумерный массив и обладает следующими свойствами:

каждый элемент таблицы — один элемент данных все ячейки в столбце таблицы однородные, то есть все элементы в столбце

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

24

Page 26: Programming Concepts

Relational Database System Целью нормализации реляционной базы данных является устранение

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

Теоретики реляционных баз данных в процессе развития теории выявили и описали типичные примеры избыточности и способы их устранения.

Реляционная модель данных включает следующие компоненты: Структурный аспект (составляющая) — данные в базе данных представляют

собой набор отношений. Аспект (составляющая) целостности — отношения (таблицы) отвечают

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

Аспект (составляющая) обработки (манипулирования) — РМД поддерживает операторы манипулирования отношениями (реляционная алгебра, реляционное исчисление).

25

Page 27: Programming Concepts

Relational Database System Транзакция (англ. transaction) — группа последовательных операций с базой

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

26

Page 29: Programming Concepts

28 Copyright 2010 FUJITSU