
- •1/ Какая функция называется булевой? Как связаны булевы функции и формулы алгебры логики?
- •2/ Сформулировать тезис Чёрча- Тьюринга.
- •3/ Какие математические модели алгоритма Вы знаете?
- •4/ Из чего состоит машина Тьюринга? Как она работает?
- •5/ Как определяется словарная функция f? в каком случае мы говорим, что машина
- •37.Машины Тьюринга как словарные функции.
- •8/ В чем заключается проблема остановки машины Тьюринга. Является ли она алгоритмически разрешимой?
- •9/ Как определяется временная сложность алгоритма?
- •10/ Что означает выражение «Задача решается за реальное время»?
- •11/ Какие задачи попадают в класс p? Какие задачи попадают в класс np? Как эти классы связаны между собой? (p-np – проблема).
- •Перечислите основные типы грамматик по классификации Хомского. Какому типу соответствуют алгоритмические языки?
- •Что такое регулярные (автоматные) грамматики? Какие типы распознающих устройств используются для распознавания регулярных грамматик?
- •Какая модель представления знаний называется продукционной? в чем ее достоинства и недостатки?
- •В чем состоит задача синтаксического анализа? Что такое синтаксические деревья? Каким образом они строятся?
- •Какие две основные стратегии синтаксического разбора вы знаете? в чем состоит основная проблема разбора?
- •2/ Какие базовые понятия лежат в основе ооп?
- •6/ Поясните такие понятия объектно-ориентированного программирования как класс, объект класса.
- •7/ Что такое наследование классов? Простое и множественное наследования.
- •8/ Инкапсуляция. Что дает инкапсуляция?
- •9/ Определите понятие конструктора класса.
- •10/ Полиморфизм. Примеры реализации полиморфизма.
8/ Инкапсуляция. Что дает инкапсуляция?
Инкапсуляция – объединение данных и действий над ними в одном объектном типе.
Инкапсуляция
Инкапсуляция (encapsulation) - это механизм, который объединяет данные и код, манипулирующий зтими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. В объектно-ориентированном программировании код и данные могут быть объединены вместе; в этом случае говорят, что создаётся так называемый "чёрный ящик". Когда коды и данные объединяются таким способом, создаётся объект (object). Другими словами, объект - это то, что поддерживает инкапсуляцию.
Внутри объекта коды и данные могут быть закрытыми (private). Закрытые коды или данные доступны только для других частей этого объекта. Таким образом, закрытые коды и данные недоступны для тех частей программы, которые существуют вне объекта. Если коды и данные являются открытыми, то, несмотря на то, что они заданы внутри объекта, они доступны и для других частей программы. Характерной является ситуация, когда открытая часть объекта используется для того, чтобы обеспечить контролируемый интерфейс закрытых элементов объекта.
На самом деле объект является переменной определённого пользователем типа. Может показаться странным, что объект, который объединяет коды и данные, можно рассматривать как переменную. Однако применительно к объектно-ориентированному программированию это именно так. Каждый элемент данных такого типа является составной переменной.
==
Целью инкапсуляции является обеспечение согласованности внутреннего состояния объекта. В C# для инкапсуляции используются публичные свойства и методы объекта. Переменные, за редким исключением, не должны быть публично доступными. Проиллюстрировать инкапсуляцию можно на простом примере. Допустим, нам необходимо хранить вещественное значение и его строковое представление (например, для того, чтобы не производить каждый раз конвертацию в случае частого использования). Пример реализации без инкапсуляции таков:
class NoEncapsulation
{
public double Value;
public string ValueString;
}
При этом мы можем отдельно изменять как само значение Value, так и его строковое представление, и в некоторый момент может возникнуть их несоответствие (например, в результате исключения). Пример реализации с использованием инкапсуляции:
class EncapsulationExample
{
private double valueDouble;
private string valueString;
public double Value
{
get { return valueDouble; }
set
{
valueDouble = value;
valueString = value.ToString();
}
}
public string ValueString
{
get { return valueString; }
set
{
double tmp_value = Convert.ToDouble(ValueString); //здесь может возникнуть исключение
valueDouble = tmp_value;
valueString = ValueString;
}
}
}
Здесь доступ к переменным valueDouble и valueString возможен только через свойства Value и ValueString. Если мы попытаемся присвоить свойству ValueString некорректную строку и возникнет исключение в момент конвертации, то внутренние переменные останутся в прежнем, согласованном состоянии, поскольку исключение вызывает выход из процедуры.
[править]
Delphi
В Delphi для создания скрытых полей или методов их достаточно объявить в секции private.
TMyClass = class
private
FMyField: Integer;
procedure SetMyField(const Value: Integer);
function GetMyField: Integer;
protected
public
property MyField: Integer read GetMyField write SetMyField;
end;
Для создания интерфейса доступа к скрытым полям в Delphi введены свойства.