Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология программиования_Си.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
33.09 Кб
Скачать

Соглашения о вызовах функций

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

Вторая проблема – освобождение фрейма после завершения функций. Так как в паскале количество аргументов фиксировано, то любая функция знает, какого размера фрейм вызова ей потребуется, поэтому она сама может освободить фрейм после завершения. Если в Си используется функция с переменным числом аргументов, то для каждого вызова функции будет свой размер фрейма вызова. Этот размер известен только вызывающей функции, поэтому в Си ответственность за освобождение фрейма несёт вызывающая функция. В программах на Си можно указать, какого типа соглашения должны использоваться при создании функции.. Для этого используются служебные слова cdecl и pascal:

Pascal void f(int x, int y)

Если использовать Pascal, то нельзя использовать функции с переменным количеством аргументов.

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

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

ООП основано на методе моделирования, в основе которого лежит понятие объекта. Объектная модель строится на 4 главных принципах:

  1. Абстрагирование Абстрагирование – процесс отвлечения от некоторых свойств и отношений между объектами. Рассматривая предметную область, мы выделяем в ней существенные и несущественные факторы. Отбрасывая в дальнейшем из рассмотрения несущественные факторы, мы выполняем абстрагирование. Абстрагирование – одно из средств построения классификаций. Например, понятие «занятие» является абстракцией, потому что в нём мы отказываемся от того, какого типа эти занятия. Понятие «лекция» является абстракцией, потому что мы отвлекаемся от содержания предмета и акцентируем внимание на форме занятий. На основе таких абстракций мы можем построить классификацию: лекции, лабораторные, практические и т.д. Сразу построить хорошую модель путём абстрагирования удаётся не всегда, поэтому процесс моделирования циклический. Если модель работает плохо, то возможно мы отбросим существенный фактор. В программирование абстрагирование внедрялось в несколько этапов. Сначала появились подпрограммы (функции). Каждую подпрограмму можно рассматривать, как параметризованную абстракцию части кода. При развитии структурного программирования появились идеи абстракции данных. Например, очереди или стек – это абстракции, потому что они говорят о внешних свойствах структур данных, а не о том, как они устроены внутренне. ООП привнесло новый принцип абстрагирования. В основе лежат классы объектов, которые сочетают абстракцию кода и абстракцию данных.

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

  3. Инкапсуляция Инкапсуляция основана не нескольких принципах. 1) Все объекты одного класса ведут себя одинаково. В программах это означает, что они имеют одни и те же методы. 2) Каждый объект хранит информацию о своём состоянии. Состояние объекта - это набор значений и свойств объекта. 3) Состояние объекта может меняться 4) Состояние объекта может влиять на его поведение 5) Состояние объекта может меняться только в результате выполнения его методов.

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