SlideShare a Scribd company logo
1 of 29
Download to read offline
Programming Concepts
Основные понятия о программировании
Programming Languages

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

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


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

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

                                   2
Programming Languages
 Типичным примером таких языков являются языки логического
 программирования (языки, основанные на системе правил).
 В программах на языках логического программирования
 соответствующие действия выполняются только при наличии
 необходимого разрешающего условия.
 Характерной особенностью декларативных языков является их
 декларативная семантика. Основная концепция декларативной
 семантики заключается в том, что смысл каждого оператора не
 зависит от того, как этот оператор используется в программе.
 Декларативная семантика намного проще семантики императивных
 языков, что может рассматриваться как преимущество декларативных
 языков перед императивными.
 Наиболее распространённым языком логического программирования
 является язык Пролог.

 Императивный язык должен описывать не столько саму задачу
 (описание, «ЧТО» нужно получить), сколько её решение («КАК»
                                3
Programming Languages
  получить). Эта парадигма программирования, которая, в отличие от
  декларативного программирования, описывает процесс вычисления в
  виде инструкций, изменяющих состояние программы. Императивная
  программа очень похожа на приказы, выражаемые повелительным
  наклонением в естественных языках, то есть это последовательность
  команд, которые должен выполнить компьютер.

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




                                  4
Programming Paradigms

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

                                5
Programming Paradigms
 Событийно-ориентированное программирование
  Парадигма программирования, в которой выполнение программы
  определяется событиями — действиями пользователя (клавиатура,
  мышь), сообщениями других программ и потоков, событиями
  операционной системы (например, поступлением сетевого пакета).
  СОП можно также определить как способ построения компьютерной
  программы, при котором в коде (как правило, в головной функции
  программы) явным образом выделяется главный цикл приложения,
  тело которого состоит из двух частей: выборки события и обработки
  события.
  Как правило, в реальных задачах оказывается недопустимым
  длительное выполнение обработчика события, поскольку при этом
  программа не может реагировать на другие события. В связи с этим
  при написании событийно-ориентированных программ часто
  применяют автоматное программирование.
  Событийно-ориентированное программирование, как правило,
  применяется в трех случаях:

                                  6
Programming Paradigms

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

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


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




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

 Класс в программировании — набор методов и функций. Суть отличия
  классов от других абстрактных типов данных состоит в том, что при
  задании типа данных класс определяет одновременно и интерфейс, и
  реализацию для всех своих экземпляров, а вызов метода-конструктора
  обязателен.
  При использовании классов все элементы кода программы, такие как
  переменные, константы, методы, процедуры и функции, могут
  принадлежать (а во многих языках обязаны принадлежать) тому или
  иному классу. Сам класс в итоге определяется как список своих
  членов, а именно полей (свойств) и методов/функций/процедур. В
  зависимости от языка программирования к этому списку могут
                                 10
Data Types
 добавиться константы, атрибуты и внешние определения.
 Как и поля, код в виде методов/функций/процедур, принадлежащих
 классу, может быть отнесен либо к самому классу, либо к экземплярам
 класса. Метод, принадлежащий классу и соотнесенный с классом
 (статический метод) может быть вызван сам по себе и имеет доступ к
 статическим переменным класса. Метод, соотнесенный с экземпляром
 класса (обычный метод), может быть вызван только у самого объекта,
 и имеет доступ как к статическим полям класса, так и к обычным полям
 конкретного объекта (при вызове этот объект передастся скрытым
 параметром метода). Например, общее количество созданных строк
 можно узнать из любого места программы, но длину конкретной строки
 можно узнать только указав, тем или иным образом, длину какой
 строки будем мерить.
 Сам класс не является объектом, однако, в зависимости от языка
 программирования и платформы, программисту могут быть доступны
 те или иные объекты, позволяющие получить информацию о классе —
 название, список членов, объем памяти, занимаемой классом или
 отдельным экземпляром. Например, может существовать
                                 11
Data Types
 специальный класс «тип данных», экземпляры которого описывают тот
 или иной конкретный класс, существующий в программе.
 Классы, могут расширяться путем наследования, которое является
 одним из важных средств повторного использования готового кода в
 ООП. Наследованный класс или интерфейс будет содержать в себе
 всё, что указано для всех его родительских классов (в зависимости от
 языка программирования и платформы, их может быть от нуля до
 бесконечности). Например, можно создать свой вариант текстовой
 строки путем наследования класса «моя строка текста» от уже
 существующего класса «строка текста», при этом предполагается, что
 программисту не придется заново переписывать алгоритмы поиска и
 прочее, так как они автоматически будут унаследованы от готового
 класса, и любой экземпляр класса «моя строка текста» может быть
 передан не только в готовые методы родительского класса «строка
 текста» для проведения нужных вычислений, но и вообще в любой
 алгоритм, способный работать с объектами типа «строка текста», так
 как экземпляры обоих классов совместимы по программным
 интерфейсам.
                                 12
Data Types
  Почти каждому члену класса можно установить модификатор доступа (за
  исключением статических конструкторов и некоторых других вещей). В
  большинстве объектно-ориентированных языков программирования
  поддерживаются следующие модификаторы доступа:
 private (закрытый, внутренний член класса) — обращения к члену
  допускаются только из методов того класса, в котором этот член определён.
  Любые наследники класса уже не смогут получить доступ к этому члену.
  Наследование по типу private запрещает доступ из дочернего класса ко всем
  членам родительского класса, включая даже public-члены (С++);
 protected (защищённый, внутренний член иерархии классов) — обращения к
  члену допускаются из методов того класса, в котором этот член определён, а
  также из любых методов его классов-наследников. Наследование по типу
  protected делает все public-члены родительского класса protected-членами
  класса-наследника (С++);
 public (открытый член класса) — обращения к члену допускаются из любого
  кода. Наследование по типу public не меняет модификаторов родительского
  класса (С++);




                                      13
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
Programming Constructs
 Flow Control (Управление потоком передачи данных) — в
  компьютерных сетях, механизм, который компенсирует различия в
  скорости передатчика и приёмника.
  Различают два способа: аппаратный (CTS/RTS) или программный
  (XOn/XOff).
  Предпочтительно использовать аппаратное управление потоком. Для
  этого нужно выбрать соответствующий пункт в меню терминальной
  программы и проинициализировать модем для работы с Hardware Flow
  Control.

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

 Инструкция или оператор (англ. statement) — наименьшая
  автономная часть языка программирования; команда. Программа
  обычно представляет собой последовательность инструкций.
                                15
Programming Constructs
 Переменная — поименованная, либо адресуемая иным способом область
  памяти, адрес которой можно использовать для осуществления доступа к
  данным. Данные, находящиеся в переменной (то есть по данному адресу
  памяти), называются значением этой переменной.


 Область видимости переменной — понятие в некоторых языках
  программирования. Оно определяет места в исходном коде программы, в
  которых может использоваться данная переменная.
  По области видимости переменные делятся на: локальные (которые «видны»
  внутри данной структуры — файла, подпрограммы или оператора) и
  глобальные (которые «видны» во всей программе). В некоторых языках
  появились ещё и общие переменные.
  Область видимости переменной может задаваться с помощью классов памяти
  или пространства имён.
  В C++ область доступа поля класса можно задавать с помощью ключевых
  слов public, private и protected.




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


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


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

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


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

                                    18
Concurrent Programming
 Оба представляют из себя последовательность инструкций, которые должны
 выполняться в определенном порядке. Инструкции в отдельных потоках или
 процессах, однако, могут выполняться параллельно.
 Процессы существуют в операционной системе и соответствуют тому, что
 пользователи видят как программы или приложения. Поток, с другой стороны,
 существует внутри процесса. По этой причине потоки иногда называются
 "облегченные процессы". Каждый процесс состоит из одного или более
 потоков.
 Существование нескольких процессов позволяет компьютеру "одновременно"
 выполнять несколько задач. Существование нескольких потоков позволяет
 процессу разделять работу для параллельного выполнения. На
 многопроцессорном компьютере процессы или потоки могут работать на
 разных процессорах. Это позволяет выполнять реально параллельную работу.
 Абсолютно параллельная обработка не всегда возможна. Потоки иногда
 должны синхронизироваться. Один поток может ожидать результата другого
 потока, или одному потоку может понадобиться монопольный доступ к
 ресурсу, который используется другим потоком. Проблемы синхронизации
 являются распространенной причиной ошибок в многопоточных приложениях.
 Иногда поток может закончиться, ожидая ресурс, который никогда не будет
 доступен. Это кончается состоянием, которое называется взаимоблокировка.
                                    19
Concurrent Programming
 Состояние гонки (англ. race condition) — ошибка проектирования
  многопоточной системы или приложения, при которой работа системы или
  приложения зависит от того, в каком порядке выполняются части кода.
  Название ошибка получила от похожей ошибки проектирования электронных
  схем. Состояние гонки — специфическая ошибка, проявляющаяся в
  случайные моменты времени и «затихающая» при попытке её локализовать.


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




                                     20
Productivity and Quality
 Отладка (Debugging) — этап разработки компьютерной программы, на
  котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где
  возникла ошибка, приходится:
 узнавать текущие значения переменных;
 выяснять, по какому пути выполнялась программа.
  Существуют две взаимодополняющие технологии отладки.
 Использование отладчиков — программ, которые включают в себя
  пользовательский интерфейс для пошагового выполнения программы:
  оператор за оператором, функция за функцией, с остановками на некоторых
  строках исходного кода или при достижении определённого условия.
 Вывод текущего состояния программы с помощью расположенных в
  критических точках программы операторов вывода — на экран, принтер или в
  файл.


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

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



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




                                     23
Relational Database System
 Реляционная СУБД (РСУБД; иначе Система управления реляционными
  базами данных, СУРБД) — СУБД, управляющая реляционными базами
  данных.
  Понятие реляционный (англ. relation — отношение) связано с разработками
  известного английского специалиста в области систем баз данных Эдгара
  Кодда (Edgar Codd).
  Эти модели характеризуются простотой структуры данных, удобным для
  пользователя табличным представлением и возможностью использования
  формального аппарата алгебры отношений и реляционного исчисления для
  обработки данных.
  Реляционная модель ориентирована на организацию данных в виде
  двумерных таблиц. Каждая реляционная таблица представляет собой
  двумерный массив и обладает следующими свойствами:
 каждый элемент таблицы — один элемент данных
 все ячейки в столбце таблицы однородные, то есть все элементы в столбце
  имеют одинаковый тип (числовой, символьный и т. д.)
 каждый столбец имеет уникальное имя
 одинаковые строки в таблице отсутствуют
 порядок следования строк и столбцов может быть произвольным
                                     24
Relational Database System
 Целью нормализации реляционной базы данных является устранение
  недостатков структуры базы данных, приводящих ко вредной избыточности в
  данных, которая в свою очередь потенциально приводит к различным
  аномалиям и нарушениям целостности данных.
  Теоретики реляционных баз данных в процессе развития теории выявили и
  описали типичные примеры избыточности и способы их устранения.


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



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




                                     26
Thank you for your interest!




            Tagir.Ziganshin@ts.fujitsu.com
                  xtagirx@riseup.net




                          27
28   Copyright 2010 FUJITSU

More Related Content

What's hot

C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
Technopark
 
Сборник практических задании по Php
Сборник практических задании по PhpСборник практических задании по Php
Сборник практических задании по Php
Rauan Ibraikhan
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
Technopark
 
языки программирования
языки программированияязыки программирования
языки программирования
anastastish
 
C++ осень 2013 лекция 1
C++ осень 2013 лекция 1C++ осень 2013 лекция 1
C++ осень 2013 лекция 1
Technopark
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
Technopark
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
Technopark
 
Ayan9r1 po(1)
Ayan9r1 po(1)Ayan9r1 po(1)
Ayan9r1 po(1)
Ayan_R
 
презентация языки программирования
презентация языки программированияпрезентация языки программирования
презентация языки программирования
nhfkzkz
 

What's hot (20)

C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
 
Технология OpenMP
Технология OpenMPТехнология OpenMP
Технология OpenMP
 
языки программирования
языки программированияязыки программирования
языки программирования
 
лекция 3
лекция 3лекция 3
лекция 3
 
Сборник практических задании по Php
Сборник практических задании по PhpСборник практических задании по Php
Сборник практических задании по Php
 
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстовСмолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
языки программирования
языки программированияязыки программирования
языки программирования
 
C++ осень 2013 лекция 1
C++ осень 2013 лекция 1C++ осень 2013 лекция 1
C++ осень 2013 лекция 1
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
лек5 6
лек5 6лек5 6
лек5 6
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
лек13 4
лек13 4лек13 4
лек13 4
 
Vba программы
Vba программыVba программы
Vba программы
 
Авиком
АвикомАвиком
Авиком
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
 
Ayan9r1 po(1)
Ayan9r1 po(1)Ayan9r1 po(1)
Ayan9r1 po(1)
 
презентация языки программирования
презентация языки программированияпрезентация языки программирования
презентация языки программирования
 

Viewers also liked

Lect 1. introduction to programming languages
Lect 1. introduction to programming languagesLect 1. introduction to programming languages
Lect 1. introduction to programming languages
Varun Garg
 
[Short 12-30] Андрей Логинов - Большой брат следит за тобой. Законный перехват.
[Short 12-30] Андрей Логинов - Большой брат следит за тобой. Законный перехват.[Short 12-30] Андрей Логинов - Большой брат следит за тобой. Законный перехват.
[Short 12-30] Андрей Логинов - Большой брат следит за тобой. Законный перехват.
UISGCON
 
актуальные угрозы информационной безопасности. конкурентные преимущества бизн...
актуальные угрозы информационной безопасности. конкурентные преимущества бизн...актуальные угрозы информационной безопасности. конкурентные преимущества бизн...
актуальные угрозы информационной безопасности. конкурентные преимущества бизн...
UralCIO
 
Криминалистика в современном мире. Дело о фантомном проникновении
Криминалистика в современном мире. Дело о фантомном проникновенииКриминалистика в современном мире. Дело о фантомном проникновении
Криминалистика в современном мире. Дело о фантомном проникновении
RISClubSPb
 
Мобильная криминалистика. Анализ резервных копий Apple IPhone и Windows Phone
Мобильная криминалистика. Анализ резервных копий Apple IPhone и Windows PhoneМобильная криминалистика. Анализ резервных копий Apple IPhone и Windows Phone
Мобильная криминалистика. Анализ резервных копий Apple IPhone и Windows Phone
RISClubSPb
 

Viewers also liked (20)

Lect 1. introduction to programming languages
Lect 1. introduction to programming languagesLect 1. introduction to programming languages
Lect 1. introduction to programming languages
 
3021 conteudo intensivo
3021 conteudo intensivo3021 conteudo intensivo
3021 conteudo intensivo
 
Adobe Creative Cloud and Licensing Programs for Education
Adobe Creative Cloud and Licensing Programs for Education Adobe Creative Cloud and Licensing Programs for Education
Adobe Creative Cloud and Licensing Programs for Education
 
[Short 12-30] Андрей Логинов - Большой брат следит за тобой. Законный перехват.
[Short 12-30] Андрей Логинов - Большой брат следит за тобой. Законный перехват.[Short 12-30] Андрей Логинов - Большой брат следит за тобой. Законный перехват.
[Short 12-30] Андрей Логинов - Большой брат следит за тобой. Законный перехват.
 
Cертификация, лицензирование и аттестация
Cертификация, лицензирование и аттестацияCертификация, лицензирование и аттестация
Cертификация, лицензирование и аттестация
 
2. belkasoft
2. belkasoft2. belkasoft
2. belkasoft
 
Open Geodata
Open GeodataOpen Geodata
Open Geodata
 
Ip soft nms 2015 ru
Ip soft   nms 2015 ruIp soft   nms 2015 ru
Ip soft nms 2015 ru
 
Компьютерная криминалистика. Обеспечение доказательной базы
Компьютерная криминалистика. Обеспечение доказательной базыКомпьютерная криминалистика. Обеспечение доказательной базы
Компьютерная криминалистика. Обеспечение доказательной базы
 
актуальные угрозы информационной безопасности. конкурентные преимущества бизн...
актуальные угрозы информационной безопасности. конкурентные преимущества бизн...актуальные угрозы информационной безопасности. конкурентные преимущества бизн...
актуальные угрозы информационной безопасности. конкурентные преимущества бизн...
 
виджет автовебинара
виджет автовебинаравиджет автовебинара
виджет автовебинара
 
Прикладная математика, фундаментальная информатика и программирование
Прикладная математика,  фундаментальная информатика и программированиеПрикладная математика,  фундаментальная информатика и программирование
Прикладная математика, фундаментальная информатика и программирование
 
Криминалистика в современном мире. Дело о фантомном проникновении
Криминалистика в современном мире. Дело о фантомном проникновенииКриминалистика в современном мире. Дело о фантомном проникновении
Криминалистика в современном мире. Дело о фантомном проникновении
 
Евгений Ли на Российской Неделе Маркетинга 2015
Евгений Ли на Российской Неделе Маркетинга 2015Евгений Ли на Российской Неделе Маркетинга 2015
Евгений Ли на Российской Неделе Маркетинга 2015
 
Родительское собрание 07.09.2016.
Родительское собрание 07.09.2016. Родительское собрание 07.09.2016.
Родительское собрание 07.09.2016.
 
Введение в E-mail Маркетинг
Введение в E-mail МаркетингВведение в E-mail Маркетинг
Введение в E-mail Маркетинг
 
Information technology & information system lecture
Information technology & information system lectureInformation technology & information system lecture
Information technology & information system lecture
 
Гарантированное уничтожение информации
Гарантированное уничтожение информацииГарантированное уничтожение информации
Гарантированное уничтожение информации
 
CYBERARK - ЗАЩИТА ПРИВИЛЕГИРОВАННЫХ УЧЕТНЫХ ЗАПИСЕЙ ОТ ВНУТРЕННИХ И ВНЕШНИХ К...
CYBERARK - ЗАЩИТА ПРИВИЛЕГИРОВАННЫХ УЧЕТНЫХ ЗАПИСЕЙ ОТ ВНУТРЕННИХ И ВНЕШНИХ К...CYBERARK - ЗАЩИТА ПРИВИЛЕГИРОВАННЫХ УЧЕТНЫХ ЗАПИСЕЙ ОТ ВНУТРЕННИХ И ВНЕШНИХ К...
CYBERARK - ЗАЩИТА ПРИВИЛЕГИРОВАННЫХ УЧЕТНЫХ ЗАПИСЕЙ ОТ ВНУТРЕННИХ И ВНЕШНИХ К...
 
Мобильная криминалистика. Анализ резервных копий Apple IPhone и Windows Phone
Мобильная криминалистика. Анализ резервных копий Apple IPhone и Windows PhoneМобильная криминалистика. Анализ резервных копий Apple IPhone и Windows Phone
Мобильная криминалистика. Анализ резервных копий Apple IPhone и Windows Phone
 

Similar to Programming Concepts

Afandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalAfandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascal
kamala_afandiyeva_zahs
 
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniyaQasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
aysel9r2
 
9 структура компонентных приложений
9 структура компонентных приложений9 структура компонентных приложений
9 структура компонентных приложений
KewpaN
 
языки и методы программирования
языки и методы программированияязыки и методы программирования
языки и методы программирования
koriv51
 
язык программирования с#
язык программирования с#язык программирования с#
язык программирования с#
Nitrosalat
 

Similar to Programming Concepts (20)

Afandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalAfandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascal
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
 
пр 2 ПО.docx
пр 2 ПО.docxпр 2 ПО.docx
пр 2 ПО.docx
 
43828
4382843828
43828
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
 
лекция № 12
лекция № 12лекция № 12
лекция № 12
 
Lekcia3
Lekcia3Lekcia3
Lekcia3
 
Тестирование параллельных программ
Тестирование параллельных программТестирование параллельных программ
Тестирование параллельных программ
 
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения
 
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniyaQasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
 
Qasimli Aysel 9r2
Qasimli Aysel 9r2  Qasimli Aysel 9r2
Qasimli Aysel 9r2
 
лек11 7
лек11 7лек11 7
лек11 7
 
лек11 7
лек11 7лек11 7
лек11 7
 
9 структура компонентных приложений
9 структура компонентных приложений9 структура компонентных приложений
9 структура компонентных приложений
 
языки и методы программирования
языки и методы программированияязыки и методы программирования
языки и методы программирования
 
Algorithms and programming lecture in ru
Algorithms and programming lecture in ruAlgorithms and programming lecture in ru
Algorithms and programming lecture in ru
 
Алгоритмизация и программирование С/С++
Алгоритмизация и  программирование С/С++Алгоритмизация и  программирование С/С++
Алгоритмизация и программирование С/С++
 
язык программирования с#
язык программирования с#язык программирования с#
язык программирования с#
 
терминология vol.2
терминология vol.2терминология vol.2
терминология vol.2
 

Programming Concepts

  • 1. Programming Concepts Основные понятия о программировании
  • 2. Programming Languages Язык программиирования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.  Компилируемые/Интерпретируемые Компилируемый язык программирования — язык программирования, исходный код которого преобразуется компилятором в машинный код и записывается в файл, с особым заголовком и/или расширением, для последующей идентификации этого файла, как исполняемого, операционной системой. Компилируемые языки обычно позволяют получить более быструю и, возможно, более компактную программу, и поэтому применяются для создания часто используемых программ. Среди них: C, C++, Java и др. 1
  • 3. Programming Languages Интерпретируемый язык программирования — язык программирования, в котором исходный код программы не преобразовывается в машинный код для непосредственного выполнения центральным процессором, а исполняется с помощью специальной программы-интерпретатора. Исключение этапа компиляции позволяет производить более быструю разработку программ, поэтому интерпретируемые языки используются при написании сложных одноразовых программ (например, для проведения однократного вычисления). Среди них: Python, Perl и др.  Декларативные/Императивные Декларативные языки программирования — это языки программирования высокого уровня, в которых программистом не задается пошаговый алгоритм решения задачи ("как" решить задачу), а некоторым образом описывается, "что" требуется получить в качестве результата. Механизм обработки сопоставления с образцом декларативных утверждений уже реализован в устройстве языка. 2
  • 4. Programming Languages Типичным примером таких языков являются языки логического программирования (языки, основанные на системе правил). В программах на языках логического программирования соответствующие действия выполняются только при наличии необходимого разрешающего условия. Характерной особенностью декларативных языков является их декларативная семантика. Основная концепция декларативной семантики заключается в том, что смысл каждого оператора не зависит от того, как этот оператор используется в программе. Декларативная семантика намного проще семантики императивных языков, что может рассматриваться как преимущество декларативных языков перед императивными. Наиболее распространённым языком логического программирования является язык Пролог. Императивный язык должен описывать не столько саму задачу (описание, «ЧТО» нужно получить), сколько её решение («КАК» 3
  • 5. Programming Languages получить). Эта парадигма программирования, которая, в отличие от декларативного программирования, описывает процесс вычисления в виде инструкций, изменяющих состояние программы. Императивная программа очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд, которые должен выполнить компьютер.  Системы Типизации Системы типизации в достаточной степени развиты в современных языках программирования и отражают общую технику использования объектов. При этом считается, что имеется две системы объектов, причем элементам одной из них ставятся в соответствие элементы другой. В зависимости от того, как это делается, возникает тот или иной подход к типизации, агрегации или классификации объектов. 4
  • 6. Programming Paradigms Парадигма программирования — это система идей и понятий, определяющих стиль написания компьютерных программ, а также образ мышления программиста. Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером. Важно отметить, что парадигма программирования не определяется однозначно языком программирования; практически все современные языки программирования в той или иной мере допускают использование различных парадигм (мультипарадигмальное программирование). Так на языке Си, который не является объектно- ориентированным, можно работать в соответствии с принципами объектно-ориентированного программирования, хотя это и сопряжено с определёнными сложностями; функциональное программирование можно применять при работе на любом императивном языке, в котором имеются функции (для этого достаточно не применять присваивание), и т. д. 5
  • 7. Programming Paradigms  Событийно-ориентированное программирование Парадигма программирования, в которой выполнение программы определяется событиями — действиями пользователя (клавиатура, мышь), сообщениями других программ и потоков, событиями операционной системы (например, поступлением сетевого пакета). СОП можно также определить как способ построения компьютерной программы, при котором в коде (как правило, в головной функции программы) явным образом выделяется главный цикл приложения, тело которого состоит из двух частей: выборки события и обработки события. Как правило, в реальных задачах оказывается недопустимым длительное выполнение обработчика события, поскольку при этом программа не может реагировать на другие события. В связи с этим при написании событийно-ориентированных программ часто применяют автоматное программирование. Событийно-ориентированное программирование, как правило, применяется в трех случаях: 6
  • 8. Programming Paradigms  при построении пользовательских интерфейсов (в том числе графических);  при создании серверных приложений в случае, если по тем или иным причинам нежелательно порождение обслуживающих процессов;  при программировании игр, в которых осуществляется управление множеством объектов.  Объектно-ориентированное, или объектное, программирование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В центре ООП находится понятие объекта. Объект — это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией. Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной 7
  • 9. Programming Paradigms ориентированности — для этого требуется наличие наследования. Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм; то есть возможность объектов с одинаковой спецификацией иметь различную реализацию.  Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием Машина Тьюринга. Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, то есть значений исходных данных, в заключительное, то есть в результаты. Таким образом, с точки зрения программиста имеются программа и память, причем первая последовательно обновляет содержимое последней. Процедурный язык программирования предоставляет возможность программисту определять каждый шаг в процессе решения задачи. Особенность таких языков программирования состоит в том, что задачи разбиваются на шаги и решаются шаг за шагом. Используя процедурный язык, 8
  • 10. Programming Paradigms программист определяет языковые конструкции для выполнения последовательности алгоритмических шагов. 9
  • 11. Data Types Тип данных — фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям, и, возможно, способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.  Класс в программировании — набор методов и функций. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен. При использовании классов все элементы кода программы, такие как переменные, константы, методы, процедуры и функции, могут принадлежать (а во многих языках обязаны принадлежать) тому или иному классу. Сам класс в итоге определяется как список своих членов, а именно полей (свойств) и методов/функций/процедур. В зависимости от языка программирования к этому списку могут 10
  • 12. Data Types добавиться константы, атрибуты и внешние определения. Как и поля, код в виде методов/функций/процедур, принадлежащих классу, может быть отнесен либо к самому классу, либо к экземплярам класса. Метод, принадлежащий классу и соотнесенный с классом (статический метод) может быть вызван сам по себе и имеет доступ к статическим переменным класса. Метод, соотнесенный с экземпляром класса (обычный метод), может быть вызван только у самого объекта, и имеет доступ как к статическим полям класса, так и к обычным полям конкретного объекта (при вызове этот объект передастся скрытым параметром метода). Например, общее количество созданных строк можно узнать из любого места программы, но длину конкретной строки можно узнать только указав, тем или иным образом, длину какой строки будем мерить. Сам класс не является объектом, однако, в зависимости от языка программирования и платформы, программисту могут быть доступны те или иные объекты, позволяющие получить информацию о классе — название, список членов, объем памяти, занимаемой классом или отдельным экземпляром. Например, может существовать 11
  • 13. Data Types специальный класс «тип данных», экземпляры которого описывают тот или иной конкретный класс, существующий в программе. Классы, могут расширяться путем наследования, которое является одним из важных средств повторного использования готового кода в ООП. Наследованный класс или интерфейс будет содержать в себе всё, что указано для всех его родительских классов (в зависимости от языка программирования и платформы, их может быть от нуля до бесконечности). Например, можно создать свой вариант текстовой строки путем наследования класса «моя строка текста» от уже существующего класса «строка текста», при этом предполагается, что программисту не придется заново переписывать алгоритмы поиска и прочее, так как они автоматически будут унаследованы от готового класса, и любой экземпляр класса «моя строка текста» может быть передан не только в готовые методы родительского класса «строка текста» для проведения нужных вычислений, но и вообще в любой алгоритм, способный работать с объектами типа «строка текста», так как экземпляры обоих классов совместимы по программным интерфейсам. 12
  • 14. Data Types Почти каждому члену класса можно установить модификатор доступа (за исключением статических конструкторов и некоторых других вещей). В большинстве объектно-ориентированных языков программирования поддерживаются следующие модификаторы доступа:  private (закрытый, внутренний член класса) — обращения к члену допускаются только из методов того класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену. Наследование по типу private запрещает доступ из дочернего класса ко всем членам родительского класса, включая даже public-члены (С++);  protected (защищённый, внутренний член иерархии классов) — обращения к члену допускаются из методов того класса, в котором этот член определён, а также из любых методов его классов-наследников. Наследование по типу protected делает все public-члены родительского класса protected-членами класса-наследника (С++);  public (открытый член класса) — обращения к члену допускаются из любого кода. Наследование по типу public не меняет модификаторов родительского класса (С++); 13
  • 15. 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
  • 16. Programming Constructs  Flow Control (Управление потоком передачи данных) — в компьютерных сетях, механизм, который компенсирует различия в скорости передатчика и приёмника. Различают два способа: аппаратный (CTS/RTS) или программный (XOn/XOff). Предпочтительно использовать аппаратное управление потоком. Для этого нужно выбрать соответствующий пункт в меню терминальной программы и проинициализировать модем для работы с Hardware Flow Control.  Логическое выражение в программировании — конструкция языка программирования, результатом вычисления которой является «истина» или «ложь».  Инструкция или оператор (англ. statement) — наименьшая автономная часть языка программирования; команда. Программа обычно представляет собой последовательность инструкций. 15
  • 17. Programming Constructs  Переменная — поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным. Данные, находящиеся в переменной (то есть по данному адресу памяти), называются значением этой переменной.  Область видимости переменной — понятие в некоторых языках программирования. Оно определяет места в исходном коде программы, в которых может использоваться данная переменная. По области видимости переменные делятся на: локальные (которые «видны» внутри данной структуры — файла, подпрограммы или оператора) и глобальные (которые «видны» во всей программе). В некоторых языках появились ещё и общие переменные. Область видимости переменной может задаваться с помощью классов памяти или пространства имён. В C++ область доступа поля класса можно задавать с помощью ключевых слов public, private и protected. 16
  • 18. Algorithms Алгоритм – это точное предписание, определяющее вычислительный процесс, ведущий от варьируемых начальных данных к исходному результату. Алгоритм означает точное описание некоторого процесса, инструкцию по его выполнению. Разработка алгоритма является сложным и трудоемким процессом. Алгоритмизация – это техника разработки (составления) алгоритма для решения задач на ЭВМ.  Парсинг (синтаксический анализ) — это процесс сопоставления линейной последовательности лексем (слов, токенов) языка с его формальной грамматикой. Результатом обычно является дерево разбора (синтаксическое дерево). Обычно применяется совместно с лексическим анализом. Синтаксический анализатор (парсер) — это программа или часть программы, выполняющая синтаксический анализ.  Алгоритм сортировки — это алгоритм для упорядочения элементов в списке. В случае, когда элемент списка имеет несколько полей, поле, служащее критерием порядка, называется ключом сортировки. На практике в качестве ключа часто выступает число, а в остальных полях хранятся какие-либо данные, никак не влияющие на работу алгоритма. 17
  • 19. Concurrent Programming  Параллельные вычисления — такой способ организации компьютерных вычислений, при котором программы разрабатываются как набор взаимодействующих вычислительных процессов, работающих параллельно (одновременно). Существуют различные способы реализации параллельных вычислений. Например, каждый вычислительный процесс может быть реализован в виде процесса операционной системы, либо же вычислительные процессы могут представлять собой набор потоков выполнения внутри одного процесса ОС. Параллельные программы могут физически исполняться либо последовательно на единственном процессоре — перемежая по очереди шаги выполнения каждого вычислительного процесса, либо параллельно — выделяя каждому вычислительному процессу один или несколько процессоров (находящихся рядом или распределённых в компьютерную сеть). Основная сложность при проектировании параллельных программ — обеспечить правильную последовательность взаимодействий между различными вычислительными процессами, а также координацию ресурсов, разделяемых между процессами.  Потоки и процессы — это связанные понятия в вычислительной технике. 18
  • 20. Concurrent Programming Оба представляют из себя последовательность инструкций, которые должны выполняться в определенном порядке. Инструкции в отдельных потоках или процессах, однако, могут выполняться параллельно. Процессы существуют в операционной системе и соответствуют тому, что пользователи видят как программы или приложения. Поток, с другой стороны, существует внутри процесса. По этой причине потоки иногда называются "облегченные процессы". Каждый процесс состоит из одного или более потоков. Существование нескольких процессов позволяет компьютеру "одновременно" выполнять несколько задач. Существование нескольких потоков позволяет процессу разделять работу для параллельного выполнения. На многопроцессорном компьютере процессы или потоки могут работать на разных процессорах. Это позволяет выполнять реально параллельную работу. Абсолютно параллельная обработка не всегда возможна. Потоки иногда должны синхронизироваться. Один поток может ожидать результата другого потока, или одному потоку может понадобиться монопольный доступ к ресурсу, который используется другим потоком. Проблемы синхронизации являются распространенной причиной ошибок в многопоточных приложениях. Иногда поток может закончиться, ожидая ресурс, который никогда не будет доступен. Это кончается состоянием, которое называется взаимоблокировка. 19
  • 21. Concurrent Programming  Состояние гонки (англ. race condition) — ошибка проектирования многопоточной системы или приложения, при которой работа системы или приложения зависит от того, в каком порядке выполняются части кода. Название ошибка получила от похожей ошибки проектирования электронных схем. Состояние гонки — специфическая ошибка, проявляющаяся в случайные моменты времени и «затихающая» при попытке её локализовать.  Синхронизация процессов — приведение двух или нескольких процессов к такому их протеканию, когда определённые стадии разных процессов совершаются в определённом порядке, либо одновременно. Синхронизация необходима в любых случаях, когда параллельно протекающим процессам необходимо взаимодействовать. Для её организации используются средства межпроцессного взаимодействия. Среди наиболее часто используемых средств — сигналы и сообщения, каналы (англ. pipe), совместно используемая память. 20
  • 22. Productivity and Quality  Отладка (Debugging) — этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится:  узнавать текущие значения переменных;  выяснять, по какому пути выполнялась программа. Существуют две взаимодополняющие технологии отладки.  Использование отладчиков — программ, которые включают в себя пользовательский интерфейс для пошагового выполнения программы: оператор за оператором, функция за функцией, с остановками на некоторых строках исходного кода или при достижении определённого условия.  Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода — на экран, принтер или в файл.  Интегрированная среда разработки, ИСР (англ. IDE, Integrated development environment или integrated debugging environment) — система программных средств, используемая программистами для разработки программного обеспечения (ПО). 21
  • 23. Productivity and Quality Обычно среда разработки включает в себя:  текстовый редактор  компилятор и/или интерпретатор  средства автоматизации сборки  отладчик. Иногда содержит также средства для интеграции с системами управления версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Многие современные среды разработки также включают браузер классов, инспектор объектов и диаграмму иерархии классов — для использования при объектно- ориентированной разработке ПО. Хотя и существуют ИСР, предназначенные для нескольких языков программирования — такие, как Eclipse, NetBeans, Embarcadero RAD Studio, Qt Creator или Microsoft Visual Studio, но обычно ИСР предназначается для одного определённого языка программирования - как, например, Visual Basic, Delphi, Dev-C++. Частный случай ИСР — среды визуальной разработки, которые включают в себя возможность визуального редактирования интерфейса программы. 22
  • 24. Productivity and Quality  Система управления версиями (от англ. Version Control System, VCS или Revision Control System) — программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое. Такие системы наиболее широко используются при разработке программного обеспечения для хранения исходных кодов разрабатываемой программы. Однако они могут с успехом применяться и в других областях, в которых ведётся работа с большим количеством непрерывно изменяющихся электронных документов. В частности, системы управления версиями применяются в САПР, обычно в составе систем управления данными об изделии (PDM). Управление версиями используется в инструментах конфигурационного управления (Software Configuration Management Tools). 23
  • 25. Relational Database System  Реляционная СУБД (РСУБД; иначе Система управления реляционными базами данных, СУРБД) — СУБД, управляющая реляционными базами данных. Понятие реляционный (англ. relation — отношение) связано с разработками известного английского специалиста в области систем баз данных Эдгара Кодда (Edgar Codd). Эти модели характеризуются простотой структуры данных, удобным для пользователя табличным представлением и возможностью использования формального аппарата алгебры отношений и реляционного исчисления для обработки данных. Реляционная модель ориентирована на организацию данных в виде двумерных таблиц. Каждая реляционная таблица представляет собой двумерный массив и обладает следующими свойствами:  каждый элемент таблицы — один элемент данных  все ячейки в столбце таблицы однородные, то есть все элементы в столбце имеют одинаковый тип (числовой, символьный и т. д.)  каждый столбец имеет уникальное имя  одинаковые строки в таблице отсутствуют  порядок следования строк и столбцов может быть произвольным 24
  • 26. Relational Database System  Целью нормализации реляционной базы данных является устранение недостатков структуры базы данных, приводящих ко вредной избыточности в данных, которая в свою очередь потенциально приводит к различным аномалиям и нарушениям целостности данных. Теоретики реляционных баз данных в процессе развития теории выявили и описали типичные примеры избыточности и способы их устранения.  Реляционная модель данных включает следующие компоненты:  Структурный аспект (составляющая) — данные в базе данных представляют собой набор отношений.  Аспект (составляющая) целостности — отношения (таблицы) отвечают определенным условиям целостности. РМД поддерживает декларативные ограничения целостности уровня домена (типа данных), уровня отношения и уровня базы данных.  Аспект (составляющая) обработки (манипулирования) — РМД поддерживает операторы манипулирования отношениями (реляционная алгебра, реляционное исчисление). 25
  • 27. Relational Database System  Транзакция (англ. transaction) — группа последовательных операций с базой данных, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта. 26
  • 28. Thank you for your interest! Tagir.Ziganshin@ts.fujitsu.com xtagirx@riseup.net 27
  • 29. 28 Copyright 2010 FUJITSU