ИГА_сети_ЭВМ_и_ТК. Хранения информации для коллективного пользования
Скачать 0.88 Mb.
|
Инкапсуляция – объединение данных и кода, манипулирующего этими данными, а также их защита от внешнего вмешательства или неправильного использования. В ООП код и данные могут быть объединены вместе, как бы создаётся "чёрный ящик". Ко-гда коды и данные объединяются таким способом, создаётся объект, т.е. то, что поддержи-вает инкапсуляцию. В ОО языках инкапсуляция, как правило, реализуется посредством механизма классов. Внутри объекта коды и данные могут быть закрытыми, они доступны только для других частей этого объекта и не доступны для тех частей программы, которые существуют вне объекта. Если коды и данные являются открытыми, то, несмотря на то, что они заданы внутри объ-екта, они доступны и для других частей программы. Характерной является ситуация, когда открытая часть объекта используется для того, чтобы обеспечить контролируемый интер-фейс закрытых элементов объекта. На самом деле объект является переменной определённого пользователем типа. Может по-казаться странным, что объект, который объединяет коды и данные, можно рассматривать как переменную. Однако применительно к ООП это именно так. Каждый элемент данных такого типа является составной переменной. Инкапсуляция нужна для защиты данных, принадлежащие объекту, от возможных ошибок, которые могут возникнуть при прямом доступе к этим данным. Применение инкапсуляции часто помогает локализовать возможные ошибки в коде программы, что намного упрощает поиск и исправление этих ошибок. 36. Методы в ООП. Способы передачи параметров. Метод в ООП – это функция или процедура, принадлежащая какому-то классу или объ-екту. Как и процедура в процедурном программировании, метод состоит из некоторого коли-чества операторов для выполнения какого-то действия и имеет набор входных аргументов. Различают простые и статические методы (методы класса): простые методы имеют доступ к данным объекта (конкретного экземпляра данного класса), статические методы не имеют доступа к данным объекта и для их использования не ну-жно создавать экземпляры (данного класса). Методы предоставляют интерфейс, при помощи которого осуществляется доступ к данным объекта некоторого класса, обеспечивая инкапсуляцию данных. От того, какой уровень доступа предоставляет тот или иной метод, выделяют интерфейсы: открытый (public) – общий для всех пользователей данного класса; защищённый (protected) – внутренний для всех наследников данного класса; закрытый (private) – доступный только изнутри данного класса. Такое разделение интерфейсов позволяет сохранять неизменным открытый интерфейс, но изменять внутреннюю реализацию. Для реализации разных способов передачи параметров в методы используются модификаторы: (нет) / in – Входной параметр. Out – Выходной параметр (значение, записанное в этот параметр, будет доступно в ме-тоде, из которого данный метод был вызван). Ref – Передача параметра по ссылке (переменная, передаваемая в качестве такого пара-метра, должна быть проинициализирована до вызова метода; при изменении значения па-раметра будет изменяться значение переданной переменной, а не ее копии). Params – указывается одномерный массив произвольной размерности (передан может быть массив или явно перечисленные значения). Данный модификатор может быть исполь-зован только последним в списке параметров метода. Различие между модификаторами ref и out: out не требует, чтобы вызывающий метод ини-циализировал передаваемый аргумент. При вызове метода необходимо указывать модификатор передаваемого параметра (это правило не относится к модификатору params). 37. Реализация методов класса. Конструкторы и деструкторы. Для каждой функции доступа, наряду с другими методами, объявленными в классе, дол-жна существовать реализация. Реализация — это описание действий функции. Конструкторы и деструкторы отвечают за существование объекта в памяти, т.е. выделяют память для экземпляра класса, затем и освобождают ее. Конструктор – специальный метод класса, предназначенный для создания экземпляров класса (объектов) и выделения памяти для хранения значений их полей. Он ведет себя как функция, которая возвращает ссылку на вновь созданный экземпляр класса. Реализация конструкторов: Имя метода-конструктора совпадает с именем класса. Конструктор создает экземпляры класса и выполняет содержащиеся в его теле операторы. Назначение кода внутри конструктора – инициализировать только что созданный экзем-пляр класса. Конструкторы: не наследуются, не могут вызваться явно (вызываются неявно – автомати-чески), не могут быть объявлены с модификаторами const, static и virtual; нельзя получить указатель на конструктор, параметры конструктора могут иметь любой тип. Деструктор – специальный метод класса, предназначенный для уничтожения экземпляра класса (объекта) и освобождения памяти, выделенной под экземпляр класса. Реализация деструкторов: Деструктор не имеет параметров, вызывается неявно (автоматически). Деструктор уничто-жает экземпляр класса, который был использован при его вызове, автоматически освобож-дая любую зарезервированную конструктором динамическую память, закрывает файлы и другие завершающие операции. 38. Полиморфизм, перегрузка методов. Полиморфи́зм – возможность объектов с одинаковой спецификацией иметь различную реализацию. Язык программирования поддерживает полиморфизм, если классы с одинаковой специфи-кацией могут иметь различную реализацию – реализация класса может быть изменена в процессе наследования. Кратко смысл полиморфизма: «Один интерфейс, множество реализаций». Полиморфизм – один из четырёх важнейших механизмов ООП (наряду с абстракцией, ин-капсуляцией, наследованием), позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в интерфейс или класс. Общность имеет внешнее и внутреннее выражение: внешняя общность – одинаковый набор методов с одинаковыми именами и сигнатурами (именем методов и типами аргументов и их количеством); внутренняя общность – одинаковая функциональность методов, ее можно описать инту-итивно или выразить в виде строгих законов, правил, которым подчиняются методы. Виды полиморфизма: специальный полиморфизм (много реализаций с похожими интерфейсами) – применяет-ся для обеспечения различного поведения функции в зависимости от типа параметра; параметрический полиморфизм (одна реализация с обобщённым интерфейсом) – обоб-щенное программирование, используется повсеместно, повышает коэффициент повторно-го использования кода. Один из способов поддержки полиморфизма – перегрузка методов. Перегрузка метода – возможность приписывать разную функциональность одному мето-ду. Определение внутри одного класса двух или более методов с одним именем, если толь-ко объявления их параметров различны. В этом случае методы называют перегруженными, а процесс – перегрузкой методов. 39. Принцип наследования. Виртуальные и абстрактные методы. Наследование – механизм ООП, позволяющий описать новый класс на основе уже су-ществующего (родительского) класса, при этом свойства и функциональность родитель-ского класса заимствуются новым классом, что позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса. Вызываемые методы делятся на: статические, виртуальные, динамические, абстрактные. Абстрактный метод – метод класса в ООП, не содержащий никаких действий (нет реали-зации), никогда не вызываемый и нужный только для наследования. Абстрактный метод подлежит определению в классах-наследниках, поэтому его можно от-нести к виртуальным, но не каждый виртуальный метод является абстрактным. Абстрактными могут быть только виртуальные или динамические методы, причем у них имеется только заголовок (в описании класса) и отсутствует реализация. Класс, содержащий абстрактные методы, также принято называть абстрактным. Виртуальный метод – метод (функция) класса в ООП, который может быть переопреде-лён в классах-наследниках так, что конкретная реализация метода для вызова будет опре-деляться во время исполнения. Это один из важнейших приёмов реализации полиморфиз-ма. Он позволяет создавать общий код, который может работать как с объектами базового класса, так и с объектами любого его класса-наследника. Переопределение методов в потомках называется перекрытием этих методов, а сами пере-определенные методы прародителя — перекрытыми потомком. Динамические методы являются более экономичными по памяти и более медленным ана-логам виртуальных. Каждому динамическому методу системой присваивается уникальный индекс. Вызов не перекрытого абстрактного метода дает диагностику ошибки. Абстрактные мето-ды используются на начальном уровне описания иерархии, что помогает при отладке про-граммы находить потомки, в которых программист забыл перекрыть необходимые методы. 40. Классы и структуры. Классы и структуры являются двумя основными конструкциями системы общих типов. Каждая, по сути, является структурой данных, инкапсулирующей набор данных и поведе-ние, связанных как логическая единица. Данные и поведение являются членами класса или структуры, и в них включены методы, свойства, события и т.д. При определении класса или структуры с именем Person, Person – это имя типа. При объ-явлении или инициализации переменной p типа Person, p – объект или экземпляр Person. Возможно создание нескольких экземпляров одного типа Person, и каждый экземпляр мо-жет иметь разные значения в своих свойствах и полях. Класс – это ссылочный тип. При создании объекта класса переменная, к которой назнача-ется объект, сохраняет только ссылку на память. При назначении ссылки на объект к новой переменной новая переменная ссылается на исходный объект. Изменения, внесенные через одну переменную, отображаются в другой переменной, поскольку обе они ссылаются на одни данные. 41. Переопределение методов базового класса. Вызов метода базового класса. Переопределение метода в ООП – одна из возможностей языка программирования, по-зволяющая подклассу или дочернему классу обеспечивать специфическую реализацию метода, уже реализованного в одном из суперклассов или родительских классов. Реализация метода в подклассе переопределяет (заменяет) его реализацию в суперклассе, описывая метод с тем же названием, что и у метода суперкласса, а также у нового метода подкласса должны быть те же параметры или сигнатура, тип возвращаемого результата, что и у метода родительского класса. Версия метода, которая будет исполняться, определяется объектом, используемым для его вызова. Если вызов метода происходит от объекта родительского класса, то выполняется версия метода родительского класса, если же объект подкласса вызывает метод, то выпол-няется версия дочернего класса. Некоторые языки программирования позволяют защищать методы от переопределения. На примере языка программирования C# . Ключевое слово base используется для доступа к членам базового класса из производного класса: Вызов метода базового класса, который был переопределен другим методом. Определение конструктора базового класса, который должен вызываться при создании экземпляров производного класса. Доступ к базовому классу разрешен только в конструкторе, методе экземпляра или методе доступа экземпляра. Использование ключевого слова base в статическом методе является недопустимым. Базовый класс, к которому осуществляется доступ, является базовым классом, заданным в объявлении класса. Например, если указать class ClassB : ClassA, члены ClassA будут до-ступны из ClassB, независимо от базового класса ClassA. 42. Свойства и методы в ООП. Основной единицей в ООП является объект, который заключает в себе (инкапсулирует) описывающие его данные (свойства) и средства обработки этих данных (методы). Свойства – это специальный механизм классов, регулирующий доступ к полям. Свойства объявляются с помощью зарезервированных слов property, read и write. Обычно свойство связано с некоторым полем и указывает те методы класса, которые должны использоваться при записи в это поле или при чтении из него. По признакам свойства разделяются: по методу доступа к полю, по типу, по использова-нию различных индексов, по способу сохранения значений в файле формы. Чтобы изменить состояние объекта, необходимо определить новые значения его свойств. Для присваивания свойству конкретного значения используется знак равенства. Синтаксис: Объект.Свойство = ЗначениеСвойства Методы – инкапсулированные в классе для выполнения какой-либо операции процедуры и функции, которым разрешен доступ ко всем полям класса. Методы объявляются в описа-нии класса после объявления полей. Синтаксис: Объект.Метод :=значение, арг2:=значение Методы по механизму наследования бывают: статические, виртуальные, динамические. По умолчанию все методы считаются статическими. Статические методы, при их переопределении в классах-потомках полностью перекрыва-ются, что позволяет полностью изменить объявление метода. Адреса статических методов определяются на этапе компиляции. Вызываемый метод определяется типом объявленной объектной переменной, а не типом объекта, поэтому статические методы не позволяют ре-ализовать концепцию полиморфизма. Виртуальные и динамические методы, при обращении к ним вызываемая процедура или функция определяется только в момент обращения (позднее связывание) и различаются только внутренней реализацией. Они определяются по типу фактической объектной пере-менной и позволяют в полной мере реализовать концепцию полиморфизма. Виртуальные методы выполняются быстрее, чем динамические, но требуют значительно больше памяти. 43. События и методы в ООП. Событие в ООП – это свойства процедурного типа, предназначенные для создания пользо-вательской реакции на те или иные входные воздействия. События имеют разное количество и тип параметров в зависимости от происхождения и предназначения. Они предназначены для того, чтобы иметь возможность предусмотреть реакцию программного обеспечения. События – это свойства объекта, значения которых можно изменять в любой момент вы-полнения программы. Эта возможность называется делегированием. Можно в любой момент взять способы реакции на события у одного объекта и присвоить (делегировать) их другому. Принцип делегирования позволяет избежать трудоемкого процесса порождения новых до-черних классов для каждого специфического случая, заменяя его простой подстановкой процедур. Методы – инкапсулированные в классе для выполнения какой-либо операции процедуры и функции, которым разрешен доступ ко всем полям класса. Методы объявляются в описа-нии класса после объявления полей. Синтаксис: Объект.Метод :=значение, арг2:=значение Методы по механизму наследования бывают: статические, виртуальные, динамические. По умолчанию все методы считаются статическими. Статические методы, при их переопределении в классах-потомках полностью перекрыва-ются, что позволяет полностью изменить объявление метода. Адреса статических методов определяются на этапе компиляции. Вызываемый метод определяется типом объявленной объектной переменной, а не типом объекта, поэтому статические методы не позволяют ре-ализовать концепцию полиморфизма. Виртуальные и динамические методы, при обращении к ним вызываемая процедура или функция определяется только в момент обращения (позднее связывание) и различаются только внутренней реализацией. Они определяются по типу фактической объектной пере-менной и позволяют в полной мере реализовать концепцию полиморфизма. Виртуальные методы выполняются быстрее, чем динамические, но требуют значительно больше памяти. 44. Обработка исключительных ситуаций. Обработка исключительных ситуаций – механизм языков программирования, предна-значенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении програм-мы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма. В русском языке применяется более короткий термин: «обработка исключений». Обработка исключений – это механизм, позволяющий двум независимо разработанным программным компонентам взаимодействовать в аномальной ситуации, называемой ис-ключением. Исключение – это аномальное поведение во время выполнения, которое программа может обнаружить, например: деление на 0, выход за границы массива или истощение свободной памяти. Такие исключения нарушают нормальный ход работы программы, и на них нужно немедленно отреагировать. 45. Технологии конструирования программ. Основные определения и понятия. Существуют различные определения технологии разработки программного обеспечения. Наиболее распространенные следующие: Технология разработки ПО – это совокупность процессов и методов создания про-грамммного продукта. Технология разработки ПО – это система инженерных принципов для создания эко-номичного ПО, надежно и эффективно работающего в реальных компьютерах. Данное определение учитывает только две из шести характеристик качества ПО – надежность и эффективность. С учетом этого можно сформулировать более общее определение. Технология разработки ПО – это система инженерных принципов для создания эко-номичного ПО с заданными характеристиками качества. Любая технология разработки ПО базируется на некоторой методологии – системе прин-ципов и способов организации процесса разработки программ. |