Основные методы и концепции ООП

ВОПРОСЫ К ЭКЗАМЕНУ

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

1. Понятие и свойства алгоритма.

2. Способы записи алгоритма.

3. Классификация языков программирования

4. Методология и технология программирования.

5. Семейство языков программирования высокого уровня.

6. Методы структурного и объектно-ориентированного программирования.

7. Алфавит языка. Константы. Переменные. Оператор присваивания.

8. Типы данных. Целый тип данных. Логический тип данных. Вещественный тип данных.

9. Перечислимый тип и тип-диапазон.

10. Ввод и вывод данных.

11. Программирование линейных алгоритмов

12. Условные операторы

13. Операторы выбора.

14. Программирование разветвляющихся алгоритмов.

15. Циклы. Цикл с параметром.

16. Циклы. Цикл с предусловием.

17. Циклы. Цикл с постусловием.

18. Вложенные циклы.

19. Досрочный выход из цикла.

20. Вспомогательные алгоритмы. Подпрограммы. Процедуры и функции.

21. Назначение, описание процедур.

22. Назначение, описание функций.

23. Формальные и фактические параметры. Локальные и глобальные переменные.

24. Виды формальных параметров.

25. Рекурсивные процедуры и функции.

26. Сложные типы данных – массивы.

27. Статические и динамические массивы.

28. Одномерные массивы.

29. Алгоритмы сортировки массивов и их программная реализация.

30. Многомерные массивы

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

Свойства алгоритма.

Дискретность. Понятность. Детерминированность. Массовость.

Результативность.

· Дискретность - это свойство алгоритма, когда алгоритм разбивается на конечное число элементарных действий (шагов).

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

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

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

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

2. Используются следующие способы представления алгоритма:

· на естественном языке (описание каждого шага словесно);

· в графическом виде (в виде блок-схем);

· на алгоритмическом языке;

· на языке программирования, в виде программы (кода).

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

Математическая модель (в виде формулы): Основные методы и концепции ООП - student2.ru

Словесная форма записи алгоритма:

1) Ввести в компьютер значение стороны a;

2) Ввести значение стороны b прямоугольника;

3) Рассчитать S=a*b;

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

Графический способ записи алгоритма:

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

Основные методы и концепции ООП - student2.ru


Запись на алгоритмическом языке :

алг Площадь прямоугольника (арг цел a,b, рез цел S)

дано | a>0 , a>0

надо | S = a*b

нач

| ввод a,b;

| S:=a*b;

| вывод "S = ", S;

кон

Запись алгоритма на языке Паскаль:

Program Task1 (input, output);

Var

a,b,s : integer;

Begin

writeln (‘Введите стороны a и b’);

read (a, b);

S:=a*b;

write (‘S=‘,S,’кв.см.’)

End.

3. сущестествуют различные классификации языков программирования.

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

Если язык близок к естественному языку программирования, то он называется языком высокого уровня, если ближе к машинным командам, – языком низкого уровня.

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

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

К языкам программирования высокого уровня относят Фортран, Алгол, Кобол, Паскаль, Бейсик , Си , Пролог и т.д.

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

Программу, написанную на языке программирования высокого уровня, ЭВМ не понимает, поскольку ей доступен только машинный язык. Поэтому для перевода программы с языка программирования на язык машинных кодов используют специальные программы – трансляторы.

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

Языки программирования также можно разделять на поколения:

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

– языки второго поколения: с мнемоническим представлением команд, так называемые автокоды.

– языки третьего поколения: общего назначения, используемые для создания прикладных программ любого типа. Например, Бейсик, Кобол, Си и Паскаль.

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

– языки программирования пятого поколения: языки декларативные, объектно–ориентированные и визуальные. Например, Пролог, ЛИСП (используется для построения программ с использованием методов искусственного интеллекта), Си++, Visual Basic, Delphi.

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

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

Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.

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

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

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

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

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

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

4. Методология и технология программирования

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

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

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

5. Язык высокого уровня [high-level language] - Язык программирования, средства которого обеспечивают описание задачи в наглядном, легко воспринимаемом виде, удобном для программиста. Он не зависит от внутренних машинных кодов ЭВМ любого типа, поэтому программы, написанные на языках высокого уровня, требуют перевода в машинные коды программами транслятора либо интерпретатора. К языкам высокого уровня

относят Фортран , ПЛ/1 , Бейсик , Паскаль , Си , Ада и др.

Текст программы на ЯПВУ по своей форме ближе к естественным языкам (чаще всего — английскому), к языку математики. Та же команда сложения двух величин на ЯПВУ похожа на привычную форму математического равенства: c:=a + b (на Паскале); c = a + b (на Фортране, Бейсике, Си).

Гораздо проще освоить программирование на языке высокого уровня, чем на ассемблере. Поэтому с появлением ЯПВУ значительно возросло число прикладных программистов, расширилось применение ЭВМ во многих областях.

Начиная с середины XX века и до нашего времени были созданы сотни языков программирования высокого уровня. Но распространенными и популярными из них стали не все. Одним из долгожителей в семействе ЯПВУ является язык Фортран. Fortran — сокращение словосочетания formula translator — транслятор формул. Первая версия Фортрана была создана в 1954году. Во времена ЭВМ второго и третьего поколений была популярна версия Фортран-IV. Фортран создавался как специализированный язык для математических расчетов, используемых в науке и технике. И в наше время этот язык, в стандарте Фортран-90 (и в последующих его модификациях Фортран-95, Фортран-2003), остаётся основным языком программирования для расчётов в области физико-технических проблем.

К числу первых ЯПВУ, созданных в 1950-х годах, относятся Кобол(создан в США) и Алгол (в Европе). Алгол, как и Фортран, был ориентирован на научно-технические расчеты математического характера. Кобол — язык для программирования экономических задач. В Коболе, по сравнению с двумя другими названными языками, слабее развиты математические средства, но зато хорошо представлены средства обработки текстов, организации вывода данных в форме требуемого документа. Для первых ЯПВУ предметная ориентация языков была характерной чертой.

Большое количество языков программирования появилось в 1960-1970-х годах. В 1965 году в Дартмутском университете был разработан язык Бейсик. По замыслу авторов это простой язык, легко изучаемый, предназначенный для программирования несложных расчетных задач. Наибольшее распространение Бейсик получил с появлением микро-ЭВМ и персональных компьютеров.

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

Наибольший успех в распространении языка Паскаль обеспечили персональные компьютеры. Фирма Borland International, Inc (США) разработала систему программирования Turbo Pascal (Турбо Паскаль) для ПК. Турбо Паскаль — это не только язык и транслятор с него, но еще и интегрированная среда программирования, дающая пользователю возможность удобно работать на Паскале: вводить и редактировать текст программы, искать синтаксические ошибки, пользоваться библиотеками подпрограмм и модулей, работать с файлами и пр. Турбо Паскаль вышел за рамки учебного предназначения и стал языком профессионального программирования с универсальными возможностями. Паскаль стал источником многих основных современных языков программирования, например таких, как Ада, Модула-2 и др.
Модула-2 — это еще один язык, предложенный Виртом, являющийся развитием языка Паскаль и содержащий средства для создания больших программ.

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

6. Структурное программирование - (СП) возникло как вариант решения проблемы уменьшения СЛОЖНОСТИ разработки программного обеспечения. Цель структурного программирования - повышение надежности программ, обеспечение сопровождения и модификации, облегчение и ускорение разработки.

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

Подход базируется на двух основных принципах:

· Последовательная декомпозиция алгоритма решения задачи сверху вниз.

· Использование структурного кодирования.

Создателем структурного подхода считается Эдсгер Дейкстра. Методы и концепции, лежащие в основе структурного программирования. Их три:

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

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

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

Метод структурного программирования оказался эффективен при написании программ «ограниченной сложности».

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

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

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

Основные методы и концепции ООП

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

· Метод абстрактных типов данных – метод, лежащий в основе инкапсуляции. Поддерживается концепцией абстрактных типов данных.

· Метод пересылки сообщений – заключается в описании поведения системы в терминах обмена сообщениями между объектами. Поддерживается концепцией сообщения.

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

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

В объектно-ориентированном программировании определяют три основных свойства:

· Инкапсуляция. Это сокрытие информации и комбинирование данных и функций (методов) внутри объекта.

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

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

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

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

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

Для поддержки концепции ООП были разработаны специальные объектно-ориентированные языки программирования. Все языки OOП можно разделить на три группы.

1. Чистые языки, в наиболее классическом виде поддерживающие объектно-ориентированную методологию. Такие языки содержат небольшую языковую часть и существенную библиотеку, а также набор средств поддержки времени выполнения.

2. Гибридные языки, которые появились в результате внедрения объектно-ориентированных конструкций в популярные императивные языки программирования.

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

7. Оператор присваивания - основной оператор любого языка программирования. Общая форма записи оператора:

имя величины := выражение

Например, V:=A; или V:=A+1;

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

Как только в программе встречается переменная, для неё в памяти отводится место. Оператор присваивания помещает значение переменной или значение выражения в отведённое место.

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

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

Наши рекомендации