double arrow

Разработка приложений с графическим интерфейсом


CLR

Consol::WriteLine(“Привет мир!”);

Обработка событий в программах, которые создаются не вручную, а в системах программирования, строятся с помощью обработчиков событий.

Обработчик – это автоматически сгенерированная функция, связанная с определенными событиями.

При разработке программ, использующих событийную технологию, не следует делать предположений о времени реакций со стороны ОС Windows на то, или иное событие.

Тема №2 «Объектно-ориентированный подход к программированию»

Одной из серьезных проблем проектирования программных систем, является их сложность.

Невозможность понять, воспринимать программный код целостным и логичным образом, создает серьезные трудности получения качественного программного продукта.

Борьба со сложностью ведется разными путями. Существуют общие и специфические пути.

К общим относят: декомпозицию системы на простые части, многоуровневую организацию, а также ряд других методов.

К специфическим относят технологии программирования.

Объектный подход является одним из хорошо зарекомендовавшим себя на практике подходов к построению сложных программных систем. На его основе разрабатываются ОС, создаются библиотеки прикладных программ. Многие из этих библиотек имеют объектную организацию, что заставляет прибегать к категориям объектов и классов, даже в том случае, если сам язык программирования не является объектно-ориентированным.




Объектный подход базируется на нескольких принципах. Все они направленны на то, что бы представлять любую систему совокупностью классов, связанных друг с другом определенными отношениями.

Абстрагирование – это выделение важного, существенного, которое характеризует свойства и поведение системы, или отдельное её части.

Целью абстрагирования является выделение объектов – сущностей, которые распознаются, выделяются из мира и которые ведут себя особым образом.

Абстрагирование носит достаточно субъективный характер. Это означает ее многовариантность. Выделить классы и отношения можно многими способами. Качество абстрагирования оценивается исходя из прикладной задачи.

Наследование отражает стремление представить систему в виде нескольких уровней. По этой причине чаще употребляют термин «иерархия наследования». Наследование между классами дает возможность передавать поведение, свойства, а так же структуру класса в целом.

Наследование может быть единичным или множественным.

Единичное Множественное

Различные объектно-ориентированные языки программирования используют один из видов наследования. Например, в С++ - множественное, а в Java - допускается только единичное наследование.

Принцип полиморфизма предполагает использование одних и тех же классов, методов для различных целей и наоборот.



Примером полиморфной операции является операция «суммирования», в зависимости от прикладной, операция «суммирования» применяется к числам, строкам, логическим значениям. И в каждом случае дает соответствующий осмысленный результат.

Полиморфизм улучшает восприятие и понимание программного кода.

Инкапсуляция заключается в том, что все детали программной реализации поведения объектов скрываются от внешних пользователей.

Пользователи – это программы и их функции, которые используют класс..

Инкапсуляция, в-первую очередь, скрывает данные. Любой набор данных определяет состояние объекта, если состояние объекта доступно внешним пользователям, то они могут его изменять. Поскольку класс не контролирует эти изменения, их последствия непредсказуемы.

При разработке класса свойства в виде данных скрываются путем введения методов Setxxx() и Getxxx().

Отношения между классами

Структура классов отображается, часто, с помощью нотации языка UML.

В UML класс обозначается как:

«+» - открытые

«-» - инкапсулированные (закрытые)

При наследовании в базовый класс относят то общее, что существует для его потомков, т.е. производных классов. Производные классы часто называют специализацией базового.

Тема №3 «Отношения между классами»

При разработке объектных моделей число уровней наследования стремятся ограничивать тремя. Это есть некоторый компромисс между сложностью результата и полезностью от унаследованных функций.



Второе соотношение, которое связывает классы – это агрегирование. Отношение агрегирования предусматривает, что экземпляры одного класса объектов могут включать экземпляр других классов.

Агрегируемые объекты способны реализовать свои функции через вызовы агрегирующего объекта. Например, через методы формы можно заблокировать кнопки.

Система в целом, таким образом, приобретает новую функциональность подобно тому, как это происходит путем наследования. Таким образом, наследование и агрегирование являются равноценными приобретениями новых функций.

Композиция классов – это отношения подобные агрегированию, но отличающиеся тем, что требуется обязательное существование экземпляров классов, входящих в отношения.

Отношение ассоциации (ассоциативная связь) – это отношение имеет место в тех случаях, когда методы одного класса используют свойства и методы другого класса.

Чаще всего ассоциацией изображается взаимодействие клиентов и серверов. Сервер является объектом, который представляет свои свойства и методы другим объектам.

Используя принципы объектного подхода, разработчик создает объектную модель своего приложения, в нее входят описание классов и отношение классов.

Процесс получения объектной модели называют, объектной декомпозицией.

Качество объектной декомпозиции оцениваются следующим образом:

ü Количество классов, не должно быть большим (порядка 10);

ü Число связей стараются минимизировать;

ü Однородность предполагает, что система состоит из одинаковых (очень похожих) элементов.

ü Регулярность заключается в том, что элементы и связи образуют повторяющиеся геометрические структуры.

ü Устойчивость к изменениям задачи.
Неустойчивость считается объектная модель, в которой новая функциональность требует изменение существующих классов.
Устойчивой считается та, в которой новая функциональность реализуется как дополнение.

ü Повторное использование.
Если классы или объектные модели в целом сконструированы разумно, то они могут быть применены повторно при разработке других систем. Чаще всего это является следствием абстрагирования.

Интерфейс и реализация класса.

Описание класса на многих языках программирования состоит из интерфейса и реализации.

Интерфейсом класса называют описание наименований и типов, его свойств и методов. Зная интерфейс можно получить ту функциональность, которая заложена в классе.

На С++ интерфейс, чаще всего, записывается в файлах с расширением .h.

Реализация класса состоит из программного кода методов.

На С++ реализацию помещают в файлы с расширением .cpp.

Если в классе имеются функции без реализации, то класс называется абстрактным.

Абстрактные классы используются в качестве базовых в иерархиях наследования.

Методы объявленные в базовых наполняются реализацией в произвольных классах.

Тема №4 «Конструктор и деструкторы»

Среди методов класса особую роль играют два типа методов: конструкторы и деструкторы.

Конструктор предназначен для выполнения всех действий необходимых для создания экземпляра объекта. Конструктор запрашивает все необходимые ресурсы, в которых нуждается экземпляр. Обычно это память для хранения свойств, а так же ссылки на программный код методов класса. Кроме этого могут устанавливаться сетевые соединения и выполняться какие-либо специальные процедуры связанные, например, с защитой и безопасностью.

В классе может быть произвольное число конструкторов. Один из них является конструктором по умолчанию. Этот конструктор не содержит параметров и не имеет возвращаемого значения. Все конструкторы именуются также как классы.

Конструкторы с параметрами предназначены для того, чтобы создавать непустые экземпляры объектов. В качестве параметра конструктора задаются исходные данные для конструирования. Ими могут быть в частности любые другие типы или классы. В программном коде компилятором перегружается нужный конструктор. Например, объект строка может иметь конструктор для целых чисел, чисел с плавающей точкой, символьных массивов и т.д.

При разработке конструкторов не рекомендуется генерировать исключения. Поскольку в вызвавшей программе это создает серьезную неопределенность при создании массивов объектов. Чтобы обойти такую проблему создают пустые экземпляры, а затем их инициализируют. Пустые экземпляры никогда не выбрасывают исключения.

Метод деструктор предназначен для уничтожения экземпляра объекта и возврата выделенных ресурсов ОС. Деструктор не имеет параметров и является единственным в классе. Деструкторы вызываются неявным образом при выходе из программного блока. Все локальные объекты, как известно, должны быть уничтожены. Деструкторы выполняют уничтожение и делают это единственным образом.

На языке С++ деструктор называется также как класс, но с символом тильда (~).

Графический интерфейс является значительно более эффективным, чем символьный интерфейс, однако, сложность программирования графических образов и диалогов также значительно превосходит сложность программирования консольных приложений. Современные системы программирования дают набор классов для построения графических интерфейсов, это позволяет сделать программу более надежной.

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

В программном коде для облегчения вызовов методов и свойств используют указатель this. Он не требует описания, но всегда соответствует контексту того класса объектов, для которого пишется программный код.

Тема №5 «Коллекция объектов»

Коллекция объектов является высокоуровневой структурой данных, которая реализована во многих библиотеках в объектном стиле. Коллекции объектов позволяют оперировать множествами произвольных объектов, которые связаны между собой некоторыми смысловыми связями. Эти связи характерны для целых групп задач. Чтобы упростить манипулирование такими множествами, в библиотеки вводят понятие коллекции.

Достоинство коллекции проявляется в сравнении с другими структурами данных, например, массивы имеют фиксированный размер и допускают размещение элементов только одного типа. Контейнерные структуры – вектор, имеют переменную длину, но сохраняют ограничение на единственный тип. Коллекции имеют переменную длину и в тоже время допускают хранение различных типов, в том числе и коллекции.

Примером отношений, которые могут существовать между объектами являются очередь или стэк.

Очередь предполагает, что элементы организованы в последовательность, причем добавление и удаление происходит специфическим образом: добавляются элементы только в конец, а извлекаются только с начала.

Стэк также предусматривает наличие последовательности с той лишь разницей, что извлечение элементов происходит из конца последовательности. Эти специальные операции относят к методам соответствующего класса коллекции.

В библиотеке .Net классы коллекций доступны в пространстве имен system::collection.

Классы с буквы I – интерфейс классы, абстрактные, без реализации.

Класс ArrayList позволяет создавать коллекции объектов последовательного характера. Здесь имитируется отношение характерное для списковой структуры.

Среди свойств ArrayList имеются свойства связанные с отображением и управлением длиной коллекции.

Свойство count возвращает количество элементов коллекции, и используется только для чтения.

Свойство Capacity (ёмкость) позволяет указать верхнее граничное значение числа элементов коллекции. Попытка добавить дополнительный элемент приведет к генерации (выбросу) исключения.

Свойство Item позволяет обратить к конкретному элементу коллекции.

Все коллекции содержат методы добавления элементов.

Метод Add – позволяет добавить новый элемент в ArrayList, и это добавление осуществляется в конец коллекции.

В классе ArrayList имеется метод BinarySearch – дихотомического поиска (половинного деления), следует обратить внимание отсортирован ли ArrayList и как выполняется операция сравнения с эталоном поиска.

Метод Contains предназначен для определения того присутствует ли заданный экземпляр объекта в коллекции. При использовании этого метода необходимо обратить внимание на то, как понимается эквивалентность двух объектов. Например, самым слабым предположением об эквивалентности может быть принадлежность к одному и тому же классу объектов. Наиболее сильным предположением может считаться двоичное совпадение областей памяти занимаемых объектами.

Метод IndexOf используется для нахождения заданного элемента (эталона) в коллекции. Метод возвращает индекс найденного элемента.

Метод LastIndexOf делает тоже, что и IndexOf, но с конца коллекции.

Метод Remove для удаления в коллекции. Часто эти методы полиморфны, что позволяет удалять по индексу или по значению.

Метод Sort позволяет сортировать элементы коллекции. Чтобы это сделать должна быть определена операция сравнения.

Класс BirArray дает возможность оперировать битами. В классе BirArray присутствует методы для выполнения логических операций над байтами.

Тема №6 «Класс HashTable»

Элементы хэш-таблицы это пару значений, в которых одно является ключевым, другое не ключевым. Поместить элемент в хэш-таблицу можно только в том случае, если он имеет уникальный ключ.

Свойство Keys это элемент коллекции, отображающий все ключи, имеющиеся в данной коллекции.

Свойство Values аналогично является набором значений элементов хеш-таблицы.

Метод ContainsKey определяет, присутствует ли в коллекции элемент с указанным ключом. Данный метод используют, например, перед добавлением информации в хэш-таблицу с тем, чтобы избежать исключения, которое возникает в случае попытки добавления элемента с существующем ключом.

Метод ContainsValue определяет, содержится ли заданное значение, среди множества значений коллекции.

Класс Queue (Очередь)

Метод Enqueue добавляет элемент в очередь. Предполагается, что элемент размещается в конце очереди и постепенно продвигается к началу, по мере того, как другие элементы из очереди исключаются.

Метод Dequeue извлекает элемент из очереди. Извлекается всегда первый элемент, при этом все остальные сдвигаются.

Метод Peek показывает, какой элемент является в очереди первым, возвращает его значения без изменения порядка в очереди.

В коллекциях бывают методы для преобразования в другие типы. Например, в коллекции Queue имеется метод ToArray и ToString преобразующие очередь соответственно в массив или строку.

Метод TrimToSize позволяет установить емкость, выше которой в коллекцию ничего не добавляется.







Сейчас читают про: