20
Курс «Информатика» тема № 5 «Парадигмы и методы программирования» заведующий кафедрой доктор физико-математических наук Роман Вячеславович Шамин shamin.ru, lector.ru, calcs.ru МИРЭА – Российский технологический университет кафедра информатики Института комплексной безопасности и специального приборостроения Москва, 2019 г. Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Курс «Информатика»

тема № 5

«Парадигмы и методы программирования»

заведующий кафедрой доктор физико-математических наук

Роман Вячеславович Шамин

shamin.ru, lector.ru, calcs.ru

МИРЭА – Российский технологический университеткафедра информатики Института комплексной безопасности и специального приборостроения

Москва, 2019 г.

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

Page 2: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

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

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

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

Программирование – это процесссоздания программ, который включаетв себя следующие этапы:1. Проектирование ПО2. Разработка алгоритмов3. Написание кода4. Отладка кода5. Тестирование

Эти процессы часто выполняютсянепоследовательно, а циклически,например: 1-2-3-4-3-2-3-4-5-3-4-5.

Очень важно понимать, что программирование– это не только и не сколько написание кодапрограммы, а проектирование архитектурыпрограммы.Код пишут – кодеры, а программистыпроектируют программы.

Серьезные программные комплексы пишутсябольшими коллективами в течениедлительного времени. Поэтому очень важноКАК писать программы. Они должны бытьпонятными и модернизируемыми.

Принципиальное значение имеет именно технология написания программ.

Page 3: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Технологии написания программ

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

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

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

▪ структурное программирование▪ объектно-ориентированное▪ функциональное программирование▪ логическое программирование

Зачем нужны парадигмы программирования?▪ При написании больших программ нужно обеспечить

возможность одновременной разработки большим коллективом.▪ Возможность дописывания и переписывания программ.▪ Возможность масштабирования программ.▪ Надежность программ

Профессиональное программирование – это обязательно работа по профессиональнымправилам, когда любой код пишется не «как короче», а «как правильно».

Page 4: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

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

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

цикл и подпрограммы.▪ Разработка программы ведется методом «сверху вниз».

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

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

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

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

Структурное программирование возникло как борьба с оператором безусловногоперехода – GOTO, использование которого приводило к «спагетти-коду».

Page 5: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Разработка «сверху вниз»

Программирование начинается с проектирования программы, которое состоит в том,чтобы представить в иерархическом виде архитектуру программы.

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

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

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

При программировании блоков используют технику «заглушек», когда блоки толькообозначаются, но не реализуются.

Page 6: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Блоки – подпрограммы

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

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

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

const int N = 10;int S = 0;for (int i = 0; i < N; i++){

S += f(i);}

std::cout << S;

int f(int a){

return a * a;}

Page 7: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

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

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

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

Объект и классОбъект – это переменная типа класса, а класс – это пользовательский тип переменной.

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

ООП поддерживают многие современные языки. Основные: C++, Java, C#, Python, PHP.

Page 8: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

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

Объективно-ориентированноепрограммирование описываетсятремя принципами:1. инкапсуляция2. наследование3. полиморфизм

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

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

Пример. Пусть мы моделируем поведение машины и светофора. В нашей модели будетдва класса: класс описывающий светофор и класс, описывающий машину.

// класс для описания светофораclass Tlihgts {

int Light; // горящий цветpublic:

int GetLight(); // вернуть текущий цветvoid Set(int light); // установить цветvoid Next(); // следующий цвет

};

// класс для описания машинclass TCar {

int State; // состояние машиныpublic:

int GetState(); // вернуть состояниеvoid Stop(); // остановитьсяvoid Start(); // начать движение

};

Page 9: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Инкапсуляция

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

TLights Lights; // создать объект светофорTCar Car1, Car2; // создать объекты машина1 и машина2

Lights.Set(1); // установить красный цвет

if(Light.GetLight() != 3) // если цвет не зеленый{

Car1.Stop(); // остановить машиныCar2.Stop();

}else{

Car1.Start(); // ехатьCar2.Start();

}

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

Page 10: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Наследование

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

Наследование в ООП – механизм, позволяющий не только сократить повторноеиспользование кода, но и сделать естественным проектирование родственных классов.

Если у нас есть класс TClass1, то мы можем объявить (создать) новый класс TClass2,который автоматически получит все поля и методы класса TClass1. При этом новый классможет быть дополнен новыми полями и методами, а также он может перекрыть любойметод класса-родителя. Класс TClass2 в свою очередь тоже может быть наследован и т.д.

В результате наследования возникает иерархияклассов, которая может быть представлена в видеграфа, в котором стрелки – наследование.В некоторых языка программирования, например, C++допускается множественное наследование, но этотмеханизм считается тяжеловесным и небезопасным.

Наследование классов позволяет экономно проектировать классы объектов дляпредставления сложных объектов.

Page 11: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Пример наследования классов

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

// класс точкиclass TPoint {public:

double X1, Y1; // координаты точкиvoid Draw(); // нарисовать

}// класс прямоугольникаclass TRect : public TPoint {public: double X2, Y2; // добавить новую точку}

Рассмотрим классы для представления геометрических фигур: точки, прямоугольник,окружности и эллипса.

// класс окружностиclass TCircle : public TPoint {public:

double R; // радиус окружности}// класс эллипсаclass TEllipse : public TCircle {public:

double R2; // второй радиус}

При наследовании классов, все поля иметоды сохраняются. При этом добавляютсяновые поля и методы.При этом наследование позволяет повторноиспользовать код.

Page 12: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Полиморфизм

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

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

Методы, которые можно изменять спомощью полиморфизма, называютсявиртуальными.При наследовании мы не меняем (и можемне знать) код Func1, однако посленаследования и изменения Func2 функцияFunc1 будет уже ссылаться на новуюфункцию Func2.

Полиморфизм – это очень интересный имощный инструмент объектно-ориентированного программирования.

Page 13: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

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

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

В настоящее время программирование – этоогромная отрасль, которая включает в себяразличные виды программирования:• профессиональное программирование• научное программирование• учебное программирование

Также программирование можно разделитьпо платформам программирования:• десктопное программирование• мобильное программирование• веб-программирование• программирование встраиваемых систем• программирование баз данных

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

Работа программистом – это высокооплачиваемая профессия с большим числомвакансий, но, чтобы стать программистом нужно учиться этому, работая над проектами.

Page 14: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Десктопные приложения

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

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

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

Языки: Java, C#, C++, Python.

Page 15: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Мобильные приложения

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

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

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

Языки: Java, Kotlin, C#, JavaScript.

В настоящий момент основныеплатформы для мобильнойразработки:• Android• iOSВозможно появятся и другие.

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

Page 16: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Веб-программирование

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

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

Языки разметки: HTML5, языки бэкенд: PHP, Python, C#, фронтенд: JavaScript, TypeScript.

Сайт представляет собой набор файлов вформате HTML, картинок, различных данных,а также базы данных, в которой хранитсяинформация о сайте, а также данныепользователей сайта и т.д.

Для работы сайта необходим хостинг, на котором установленвеб-сервер. Хостинг – это услуга, предоставляющая хранениефайлов сайта, базы данных и работу веб-сервера. Веб-сервер –это сервер, принимающий запросы HTTP и выдающий ответыHTML, картинки и т.д. При этом веб-сервер обеспечивает работускриптов (PHP и т.п.).

Page 17: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Программирование баз данных

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

Программирование баз данных – это проектирование и реализация баз данных.Современные базы данных реализуются СУБД (системы управления базами данных).

Программирование баз данных – это не только разработка структуры БД и работа сданными, но и программирование триггеров, хранимых процедур на стороне серверабазы данных.

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

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

Наиболее известные СУБД: MySQL, Oracle Database, Microsoft SQL-Server, PostgreSQL имногие другие.

Page 18: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Заключение

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

В этой лекции Вы познакомились со следующими понятиями:

1. Что такое программирование и основные этапы программирования2. Структурное программирование. Основные положения3. Технология разработки «сверху вниз»4. Понятие объектно-ориентированного программирования5. Инкапсуляция, наследование, полиморфизм6. Различные виды программирования7. Десктопные приложения8. Мобильные приложения9. Веб-программирование10. Программирование баз данных

Page 19: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Подготовка к тесту

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

Вопрос № 1:«Этапы программирования»

Вопрос № 2:«Принципы структурного программирования»

Вопрос № 3:«Что такое подпрограмма (функция)?»

Вопрос № 4:«Принципы объектно-ориентированного программирования»

Вопрос № 5:«Чем отличается объект от класса?»

Page 20: Информатика лекция № 1 · Курс «Информатика» тема№ 5 «Парадигмы и методы программирования» заведующий

Подготовка к тесту

Лекции по информатике, Р.В. Шамин: shamin.ru, lector.ru, calcs.ru

Вопрос № 6:«Что такое инкапсуляция?»

Вопрос № 7:«Что такое полиморфизм?»

Вопрос № 8:«Структура десктопных приложений»

Вопрос № 9:«Специфика мобильных приложений?»

Вопрос № 10:«Зачем нужен хостинг для веб-программирования?»

Удачи на экзамене!