Инкапсуляция, наследование и полиморфизм
Инкапсуляция - это механизм, который объединяет данные и код, манипулирующий этими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. В объектно-ориентированном программировании код и данные могут быть объединены вместе; в этом случае говорят, что создаётся так называемый "чёрный ящик". Когда коды и данные объединяются таким способом, создаётся объект. Другими словами, объект - это то, что поддерживает инкапсуляцию.
Полиморфизм - это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных.
Наследование - это процесс, посредством которого один объект может приобретать свойства другого. Точнее, объект может наследовать основные свойства другого объекта и добавлять к ним черты, характерные только для него. Наследование является важным, поскольку оно позволяет поддерживать концепцию иерархии классов. Применение иерархии классов делает управляемыми большие потоки информации.
Объект ListBox.
Экземпляр класса TListBox представляет собой список. Рассмотрим его основные свойства. Основное свойство для списка - это Items. Тип у него - TStrings. Именно в нем и хранятся элементы нашего списка. Для заполнения списка нажмите на кнопку с многоточием рядом с названием этого свойство в инспекторе объектов. Появится окно String List Editor, в котором можно печатать элементы нашего списка (разделяя их нажатием клавиши Enter).
С элементами списка можно работать и программно. Для этого используем это же самое свойство Items.
Код для добавления нового элемента в список:
ListBox1->Items->Add("Новый элемент");
Код для очистки всего списка:
ListBox1->Items->Clear();
Код для удаления элемента из списка:
ListBox1->Items->Delete(0);
Параметр в скобках (у нас это ноль) - это номер удаляемого элемента. В нашем примере фактически удаляется первый элемент списка, так как их нумерация начинается с нуля.
Код для добавления нового элемента в определенное место:
ListBox1->Items->Insert(2,"Roman'");
В данном примере новый элемент Roman вставится на второе место (с точки зрения пользователя это будет третье место, так как их нумерация начинается с нуля).
Свойство ItemIndex служит для определения выделенного в списке элемента (оно доступно как для чтения, так и для записи). Элементы списка нумеруются с нуля, так что если выделен, например, третий элемент, то значение этого свойства равно 2. Если ни один элемент списка не выделен, то значение свойства ItemIndex равно -1.
Код для снятия выделения с элемента списка:
ListBox1->ItemIndex=-1;
Свойство списка MultiSelect определяет, можно ли выделять несколько элементов списка одновременно. Если оно равно false (значение по умолчанию), то выделять несколько элементов нельзя, а если true, то можно.
Свойство Sorted определяет, сортируются ли элементы списка. По умолчанию оно равно false, и если установить его в true, то список будет отсортирован и новые элементы будут вставляться не в конец, а в соответствующее сортировке место.
Объект RadioGroup.
Компонент RadioGrouр
Компонент RadioGroup - панель группы радиокнопок. Панель может содержать регулярно распоюженные столбцами и строками радиокнопки. Надпись в левом верхнем углу панели определяется свойством Caption. А надписи кнопок и их количество определяются свойством Items, имеющим тип TStrings. Щелкнув на кнопке с многоточием около этого свойства в окне Инспектора Объектов, вы попадете в редактор списков строк. В нем вы можете занести надписи, которые хотите видеть около кнопок, по одной в строке. Сколько строчек вы запишете столько и будет кнопок.
Кнопки, появившиеся в панели после задания значений Items, можно разместить в несколько столбцов (не более 17), задав свойство Columns. По умолчанию Columns = 1, т.е. кнопки размещаются друг под другом.
Определить, какую из кнопок выбрал пользователь, можно по свойству Itemlndex, которое показывает индекс выбранной кнопки. Индексы начинаются с 0. По умолчанию Itemlndex = -1, что означает отсутствие выбранной кнопки. Если вы хотите, чтобы в момент начала выполнения приложения какая-то из кнопок была выбрана (это практически всегда необходимо), то надо установить соответствующее значение Itemlndex во время проектирования. Если вы используете радиокнопки не для ввода, а для отображения данных, устанавливать значение Itemlndex можно программно во время выполнения приложения.
Компонент RadioGroup очень удобен, но не свободен от некоторых недостатков. Его хорошо использовать, если надписи кнопок имеют примерно одинаковую длину и если число кнопок в каждом столбце (при размещении их в нескольких столбцах) одинаково. Например, группа радиокнопок занимает слишком много места, которое пропадает впустую. Связано это с тем, что длина надписей у кнопок первого столбца превышает длину надписей у остальных кнопок. A RadioGroup при размещении кнопок ориентируется на надпись максимальной длины. Еще хуже выглядела бы эта группа, если число кнопок было бы, например, равно 5.