- •Динамическое распределение памяти Статическое выделение памяти
- •Динамическое выделение памяти
- •Библиотека c для управления динамическим выделением памяти
- •Изменение размеров выделенного блока
- •Агрегатные типы данных
- •Объявление структур
- •Определение и инициализация переменных
- •Инициализация
- •Доступ к полям структуры
- •Функции и структуры
- •Создание синонимов для структурных типов
- •Файловый ввод и вывод
- •Открытие файла
- •Функции для ввода вывода в поток
- •Управление просмотром файлов
- •Функции с переменным числом аргументов
- •Реализация функций с переменным числом аргументов
- •Особенности вызова функции в си
- •Объектно-ориентированное программирование
- •1) Абстрагирование
- •2) Декомпозиция
- •3)Инкапсуляция
- •Наследование
- •Расширение понятия структура
- •Использование ссылок в аргументах функции
- •Функции, возвращающие ссылки
- •Проблема инициализации
- •Объявление и определение классов
- •Конструкторы и деструкторы
- •Варианты синтаксиса инициализации объектов
- •Статические члены-данные
- •Неявный указатель this
- •Статические методы классов
- •Конструктор копирования
- •Друзья класса
- •Область видимости в классе
- •Уточнение концепции ограничения доступа
- •Наследование
- •Конструкторы и деструкторы производных классов
Объектно-ориентированное программирование
В основе программирования могут лежать разные идеи. В соответствии с этим существует несколько парадигм программирования. Парадигма - важная теоретическая база. Парадигмы:
а) процедурная. В основе построения программ лежит алгоритмический подход. Языки процедурного программирования: pascal, c, fortran.
б) функциональная. В ее основе лежит математическое понятие функции. Вся программа и ее части рассматриваются как функции. В математических функциях в отличие от программных функций невозможен побочный эффект. Языки: lisp, scheme.
в) логическая. В основе построения программ лежит логика предикатов. Основная особенность: программа носит декларативный, а не процедурный характер. Языки prolog.
г) объектно-ориентированное. В основе программ лежат объектные модели предметных областей.
Одной из причин ошибок, возникающих при решении задач, является различие терминологии, которая используется для формулирования задачи предметной области и теми терминами, которые используются в программах. Уменьшить семантический разрыв можно, если в языках программирования будет предусмотрена возможность их достраивания. Это позволит приблизить язык программ к естественному языку. В основе ООП лежат объектные модели предметных областей, а именно. Для того чтобы решить задачу нужно в предметной области выделить объекты, которые являются существенными для данной задачи. Нужно установить, какими свойствами, и каким поведением обладают эти объекты, и, кроме того, в каких отношениях находятся различные объекты друг с другом. После того как получена объектная модель предметной области, она может быть построена с помощью компьютерной программы. Для этого нам нужно уметь представлять в программе свойства, поведения и отношения между объектами. В основе ООПлежит несколько фундаментальных принципов:
1) Абстрагирование
Моделирование это создание некоего физического или мыслиемого объекта, с помощью которого можно изучать свойства реального объекта. Результаты эксперимента с моделью могут быть перенесены на реальные объекты. Модель всегда проще чем реальный объект, помоту что в ней отброшены несущественные для изучаемого процесса свойства. Отбрасывание несущественных свойств называется Абстрагированием.
2) Декомпозиция
Существует множество подходов для композиции программ. В первых процедурных языках появились подпрограммы или функции, которые выполняли некоторую логически-завершенную цепь вычислений. Далее, с появлением C появилась идея раздельной компиляции. Это дало возможность создавать библиотеки с объектным кодом программ и затем многократно использовать их в разных проектах. Здесь композиция выполнялась по функциональному принципу. То есть, что делает та или иная функция. ООП принесло новый принцип декомпозиции. Модули в этом случае соответствуют классам объектов.
3)Инкапсуляция
Одной из важных проблем программирования является повторное использование кода. То есть технология, когда некоторый модуль программы можно без всяких изменений перенести в другую программу. Чтобы добиться этого нужно предъявлять к модулям некоторые требования, а именно: функционирование модуля не должно зависеть от того контекста, в котором используется этот модуль. Все взаимодействие с другими модулями осуществляется с помощью четко определенного набора методов. В совокупности эти методы называются интерфейсом модуля. Так как здесь можно представить, что содержимое модуля находится в некоторой капсуле, то этот поход называется инкапсуляцией.