
Лекция 1.
Введение. Понятие информатики и прикладной информатики.
Информатика – наука о способах получения, накопления, хранения, преобразования, передачи, защиты и использования информации. Включает в себя дисциплины, относящиеся к обработке информации в вычислительных машинах и сетях.
Информатика состоит из нескольких разделов:
Теоретическая информатика – занимается теорией языков и автоматов, теории вычислительности, теорией графов, криптологией, логикой, формальной семантикой и прочее.
Практическая информатика – ассоциирует внимание на решение стандартных задач: хранение и управление информации структур данных, построение алгоритмов модели решения общих или сложных задач. Одной из центральных тем практической информатики является инженерия ПО.
Техническая информатика – занимается аппаратной частью вычислительной техники, исследует принципы построения компьютеров, взаимодействие между ПК, электронный обмен данных и прочее.
Естественная информатика – изучает процессы обработки информации в природе, человеческом мозге, в обществе, опираясь на теорию эволюции, биологию, генетику, социологию, историю и прочее.
Прикладная информатика – дисциплина объединяет конкретное применение информатики в тех или иных областях жизни, науки, производства. Подразделяется на:
Бизнес – информатика – наука о проектировании, разработки, применения информационных и коммуникационных систем в бизнесе. Является связующим звеном между информатикой и экономикой.
Геоинформатика – наука, технология и производственная деятельность по научному обоснованию, проектированию, созданию и использованию ГИС. По разработке геоинформационных технологий по приложению ГИС для практических и научных задач.
Компьютерная лингвистика – направлено искусственного интеллекта, который ставит своей целью использование математических моделей для описания естественных языков.
Биоинформатика – объединяет в себя дисциплины направленные на изучение и создание математических методов компьютерного анализа сравнительно геномики. Разработка алгоритмов и программ для предсказания пространственной структуры белков, исследование стратегий вычислительных методологий управление информационных сложности биологических систем.
Хемоинформатика – объединяет в себя научное направление связанные с применением методов информатики для решения химических задач.
Создание и управление БД по химии.
Прогнозирование химических свойств и материаловедение химических материалов.
Форматорный поиск.
Оценка молекулярного подобия
Виртуальный скрининг.
Молекулярный дизайн.
Визуализация химического пространства.
Экоинформатика – применение информатики в экологических средах для рационального природоиспользования, безопасности жизнедеятельности человека.
Предмет информатики как науки составляет аппаратное обеспечение средств вычислительной техники, программное обеспечение средств вычислительной техники, средств взаимодействия аппаратного и программного обеспечения, средств взаимодействия человека с аппаратным и программным обеспечением. В информатике все многообразие средств взаимодействия называется интерфейсами.
Задачи информатики как науки
Изучает структуру общих свойств информации, исследовать законы и методы создания преобразования накопления, передачи и использования информации.
Систематизация приемов и методов работы с программными средствами вычислительной техники.
Данные - любой набор символов и представляемые ими записи изображения сигналов как носителей информации рассматриваемых к их содержательному смыслу.
Пример: 25 23 27 24
Информация – данные сопровождающие смысловой нагрузкой.
Информация = данные + смысл
Пример: 800 рублей, 20°С 18 августа
Знания – зафиксированная и проверенная практикой информация, которая может многократно использоваться для решения тех или иных задач. По сравнению с информацией имеет практическую составляющую.
Знание = информация + практическое использование
Пример: среднесуточная температура летом 2012 года в городе Уфа была больше среднесуточной температуры летом 2011 года, но меньше среднесуточной температуры летом 2010 года.
Основные операции над данными заключаются в следующем:
Сбор, накопление, данных с целью обеспечения достаточной полноты для ее последующей обработки.
Формализация – приведение данных к единой форме.
Фильтрация данных – устранение лишних данных, которые не нужны для обработки.
Сортировка данных – приведение данных в определенный порядок по заданному признаку с целью удобства использования.
Архивация данных – сохранение данных в удобной, доступной и сжатой форме.
Защита данных – комплекс мер направленных на предотвращение потерь, изменение и модификаций данных.
Транспортировка данных – прием и передача данных между пользователями информационных процессов. Источник – сервер, потребитель – клиент.
Преобразование данных – изменение данных из одной формы в другую, из одной структуры в другую, изменение типов носителей.
Информация
по отношению к окружающей среде
входная
выходная
внутренняя
по отношению к конечному результату
исходная
промежуточная
результирующая
по отношению к изменчивости
постоянная
переменная
смешанная
по стадии использования
первичная
вторичная
по полноте
избыточная
достаточная
недостаточная
по временному списку
статическая
динамическая
по локализации
общемировая
национальная
местная
по предметной области
коммерческая
научная
учебная
военная
Свойства информации
реприсотивность – характеризует правильность его отбора и формирование в целях адекватного отображения свойств объекта
содержательность – отражает систематическую емкость (объем обрабатываемых данных)
достаточность (полнота)
доступность – характеризует степень возможности получения и обработки информации
актуальность – определяется степенью сохранения ценности информации в момент ее использования
своевременность – поступление информации не позже заранее заданного момента времени
точность – степень близости информации не позже заранее заданного момента времени
достоверность – свойства отражать объекты с необходимой точностью
устойчивость – способность информации реагировать на изменение информации без нарушения необходимой точности.
Лекция 2.
Сущность экономической информации – в системах организационного направления выделяют экономическую информацию, связанную с управлением людьми. В общем случае под термином экономическая информация понимается информация, отражающая и обслуживающая процессы производства, распределения, обмена и потребления, материальных благ.
Экономическая информация – совокупность сведений, отражающих социальные экономические процессы и служащих для управления этими процессами и коллективами людей производственной и непроизводственной сфере.
Экономическая информация неотделима от информационного процесса управления, осуществляемая в производственных и непроизводственных сферах, используется во всех отраслях народного хозяйства и во всех органах общегосударственного управления. Выделяют несколько критериев классификации экономической информации:
По принадлежности к сфере материального производства и непроизводственной сфере. (Маркетинговое, муниципальное налоговое хозяйство)
По стадиям воспроизводства и элементам производственного процесса (такие разновидности информации, как информация, отражающая производство, распределение и потребление, материальные трудовые и финансовые ресурсы)
По временным стадиям управления (выделяют прогнозную, плановую, учетную информацию, информацию для анализа хозяйственной деятельности (АХД), информация для оперативного управления, составления отчетности)
По критериям соответствия отражаемым явлениям (достоверная и недостоверная).
По полноте отражения событий (достаточная (полная), недостаточная, избыточная).
По стадии возникновения (исходная(первичная), производственная (вторичная)). Исходная экономическая информация возникает в результате действия источников информации (министерства, ведомства, контрагенты, общеэкономические факты) и по этим источникам исходная информация делится на планово-директивную(информация, которая движется по уровням иерархии управления сверху вниз) и учетно-отчетную(информация перемещается по уровням управления снизу вверх).
По стабильности во времени (постоянная (условно-постоянная) и переменная)
Для оценки уровня стабильности используется коэффициент стабильности. К(ст)=(ИС(общ)-ИС(изм))/ИС(общ). ИС(общ) – общее число информационных совокупностей. ИС(изм) – число информационных совокупностей, изменивших свои значения за период. Если коэффициент стабильности не меньше 85%, то коэффициент стабильности считается постоянной и в условиях автоматизированной обработки данных ее следует хранить в виде самостоятельных массивов нормативно-справочной информации или файлов БД.
По технологии решения. При решении экономических задач различают входную промежуточную и выходную информацию.
Оценивание информации может осуществляться на основе качественных и количественных характеристик, иначе называемых мер. Наиболее существенными являются статистические, семантические и прагматичные подходы.
Синтаксическая мера информации – объем данных в сообщении измеряется количеством символов (разрядов) принятого алфавита в этом сообщении. Одно и то же количество разрядов в разных системах счисления может передать разное количество состояний отображаемого объекта.
N=m^n. N-число всевозможных состояний. M-основание системы счисления. N-число разрядов сообщения. В современных компьютерах наряду с минимальной единицей данных (битом) используются укрупненные единицы информации (байт). Определение количества информации на синтаксическом уровне связано с понятием неопределенности … Пусть до получения информации получатель мог иметь некоторые предварительные (априорные) сведения о системе, что количественно определяет мера неопределенности состояния системы H(a) а-априорные сведения. После получения некоторого сообщения B получатель приобрел дополнительную информацию I[B](a), которая уменьшила его априорную осведомленность так, что апостариорная неопределенность стала H(a/B). Тогда количество информации I[B](a) по система а полученное сообщение В будет определяться как I[B](a)=H(a)-H(a/B) разностью неопределенностью до получения сообщения и неопределенностью после получения сообщения. Таким образом количество информации измеряется изменением неопределенности состояния системы. Если конечная неопределенность H(a/B) обратится в ноль, то первоначальное неполное знание заменится полным знанием. Иными словами энтропия системы H(a) может рассматриваться как мера недостающей информации. Если система имеет N возможных состояний, то согласно формуле Шеннона H(a)=Сумма(от 1 до N)P[i]logP[i]. Если все состояния системы равновероятны, то любое P[i]=1/N. Для случая если P[i]=1/N, то H(a)=LogN.
Семантическая мера информации – для измерения смыслового содержания информации (ее количества на семантическом уровне) предложена Шнейдером, тезаурусная мера информации. Мера связывает семантические меры информации со способностью пользователя воспринимать поступившее сообщение. Семантические свойства отражает тезаурус в зависимости от соотношения между смысловым содержанием информации S* и тезаурусом пользователя S[п] изменяется количество семантической информации I[c]. Если S[п]=0, то пользователь не воспринимает поступившую информацию. Если S[п]->бесконечность, то поступившая информация ему не нужна. В этих двух случаях I[c]->0. При разработке информационного обеспечения … следует стремиться согласованию величин S* и S[п], чтобы в циркулирующей системе информации была понятна, доступна для восприятия. S=Ic/Vд.
Лекция 3.
Хранение данных в компьютерных системах
Данные в современных компьютерах представляются в виде комбинации двоичных нуля и единиц.
{0,1}-бит.
Нулем кодируется отсутствие сигнала, единицей – наличие.
Для оперирования двоичными нулями и единицами в электронных схемах используются вентили, триггеры и конденсаторы.
Эти элементы строятся из типовых блоков, которые реализуют логические операции And, Or, Xor, Not (это вентили).
Триггеры – схема, которая постоянно выдает выходное значение 0 или 1 если оно не меняется до тех пор, пока одиночный импульс от другой схемы не переведет ее в другое состояние.
Пока оба входных значения равны 0, выходное значение будет неизменным, однако если кратковременное появление единицы на входе №1 вызовет установку на выходе схемы единицы, то выходное значение будет равным 1. Если подать 1 на вход№2, то значение на выходе равно 0.
Значение триггерной схемы состоит в том, что она является идеальным механизмом для хранения двоичных данных. Величина, сохраняемая в триггере определяется его выходным значением. Другие схемы могут изменить значение на триггере, посылая на него управляющие импульсы.
Конденсаторы – заряд сохраняется на пластинах конденсатора после отключения источника питания. У конденсатора два состояния: заряжен или разряжен (кодируется 0 и 1). Они используются для создания динамической памяти. Структура памяти: запоминающая схема памяти компьютера организована в небольшие блоки, которые доступны как единое целое, и называются ячейкой памяти. Размер ячейки памяти составляет 8 бит.
Мультиплексор(посмотреть).
1 байт=8 бит, 1 ячейка = 8 триггеров или конденсаторов. Старший конец – самый левый, младший – правый.
Для идентификации отдельных ячеек каждой ячейке присваивается уникальное имя – адрес ячейки. Все ячейки упорядочены по своим адресам. В состав основной памяти кроме электрических схем, фиксирующих значения битов, входят системы для записи и считывания значения битов. Организация памяти, когда можно записать в любую ячейку данные называется RAM (произвольный доступ)
Запоминающие устройства большой емкости
В связи с невозможностью постоянного хранения данных в ограниченном объеме основной памяти используют устройства дополнительной памятью, которая называются массовой памятью.
Расположение секторов и дорожки не является постоянной характеристикой, она маркируется магнитным способом в процессе форматирования диска. Для оценки производительности дисковой системы используется ряд параметров: время установки – время, которое требуется для перемещения головки с одной дорожки на другую; задержка вращения или время ожидание – половина времени, за которое совершается полный оборот диска, характеризует среднее время, необходимое для того, чтобы нужные данные записались на диск; время доступа – суммарное время установки + время ожидания; скорость передачи – скорость, с которой могут считываться и записываться данные на жесткий диск.
Лекция 4.
Контрольные домены возможные типы серверов доменов
Active directory – служба windows, входящая в набор Windows Server, включает в себя сетевые объекты доменов (принтеры и т.д.)
Пространство имен – ограниченная область, в которой может быть распознано данное имя. Распознание имени заключается в его сопоставлении с некоторым объектом или объемом информации, которому это имя соответствует.
Объект – непустой именованный набор атрибутов, обозначающий нечто конкретное.
Атрибуты содержат информацию, однозначно описывающую данный объект.
Дерево – используется для иерархии объекта или контейнера. Как правило конечными элементами дерева являются объекты. В узлах располагаются контейнеры. Дерево отображает взаимосвязь объектов или указывает путь от одного объекта к другому. Простой каталог представляет собой контейнер.
Имена используются для различения объекта в директории.
Каждый объект имеет уникальное имя и относительное.
Доменная модель службы каталогов. в рамках каталога Active Directory одним из основных понятий является понятие домена. Домен – совокупность компьютеров, характеризующиеся наличием общей базы пользователей и единой политикой безопасности. Домены позволяет разделить каждый объект. Три цели – создание единой политики безопасности…
Типы иерархии доменов:
Родитель – потомок. Имя дочернего домена включает в себя имя родительского.
Контроллеры доменов отвечают за идентификацию пользователей и содержат фрагмент каталога.
Некоторые операции выполняются только одним доменом. Эти операции называются операциями с одиночным доменом.
Роль файловых серверов: он представляет доступ к файлам, и управляет ими.
Для контроля дискового пространства для пользователей на томах используется дисковый код.
Так же можно задать что необходимо регистрировать в журнале превышение пользователем заданного дискового пространства.
Для быстрого поиска данных используется служба индексирования.
Позволяет производить поиск файлов различных форматов и на различных языках.
Сервер печати предоставляет доступ к принтерам и управляет ими. После того как задана роль сервера печати появляется возможность использовать обозреватель для управления принтером; приостанавливать, возобновлять, удалять задачи на печать, а также следить за состоянием принтера. Печать с клиентов Windows XP; подключаться к общим принтерам сети, установка драйверов с веб-узла.
Сервер приложений представляет базовую технологию, обеспечивающий инфраструктуру ключа и службу для приложений, находящихся в системе. Сервер приложений содержит: группировка ресурсов; управление распределенными транзакциями; синхронная связь программ при помощи очереди сообщений; модель оперативной активации объекта; интегрированная безопасность.
Сервер приложений . при настройке сервера устанавливаются дополнительные службы и технологии (ASP.NET).
Почтовый сервер. Чтобы предоставить пользователю услуги электронной почты можно воспользоваться компонентами POP3 и SMTP, включенными в семейство Windows Server. Служба POP3 использует протокол для извлечения почты, может использоваться вместе со службой SMTP для передачи почты. POP3 используется для хранения учетной записи на почтовом сервере и управления ей.
Сервер терминалов. Позволяет создать единую точку установки которая предоставляет нескольким пользователям доступ к любому компьютеру. Пользователи могут запускать программу, сохранять файлы и использовать ресурсы сети с удаленного компьютера, так как если бы ресурсы были установлены на своем компьютере.
Служба DNS – служба имен TCP:IP, используемая в сети. Позволяет компьютерам клиентов в сети регистрировать и сопоставлять понятные имена DNS.
Лекция 5.
Объектно-ориентированный подход в программировании
При ООП программа представляет собой описание объектов, их свойств (атрибутов), совокупностей (классов), отношений между ними, способов их взаимодействия и операций над объектами (методов).
В ООП вводится понятие наследование. Механизм наследования атрибутов и методов позволяет строить произвольные понятия на основе базовых и таким образом создавать модель любой сложности области с заданными свойствами.
Обработка событий. Событие – взаимодействие объектов между собой, в результате которых изменяются атрибуты этих объектов.
Инкапсуляция – сокрытие свойств и методов внутри объекта.
Полиморфизм – наличие функций в объектах, с возможностью обработки данных переменного типа.
Наиболее известные объектно-ориентированные языки: С++(поддерживает множественное наследование), Visual Basic, Java и т.д.
Использование ООП позволяет многократно использовать созданный код, удобно его адаптировать под конкретные задачи.
Блочное программирование.
Программа компонуется в виде отдельных блоков, выполняющих небольшие задачи; блоки помещаются в одном или нескольких файлах, обслуживают отдельные задачи и тесно связаны друг с другом (один блок нельзя вызвать раньше, чем другой). Структура представляет собой линейную последовательность. Данные между блоками передавались непосредственно, блоки тесно переплетались друг с другом, это осложняло разработку больших программ, модификацию программ, блочное программирование было адаптированы под машины того времени.
Процедурное программирование
Наиболее повторяющиеся блоки представлялись в виде процедур. Это позволило снизить дублирование фрагментов кода за счет вызова одних и тех же процедур.
Модульное программирование
Группы процедур стали объединяться в модули, которые применялись для решения каких-то задач. Сложность заключалась в том, что нельзя использовать модули одной программы в другой программной области. Создать универсальный модуль, который позволял работать с широким типом задач, оказалось сложным.
Наследование – свойство того или иного объекта сохранять поведение (атрибуты и операции над ними) от родительского объекта. Родительский объект называется базовым классом, а дочерний – производным классом. Конструкторы классов не наследуются. В ООП имеется возможность замещать наследуемые методы другими словами. Механизм перегрузки.
Инкапсуляция – возможность доступа к объекту и манипулирование им исключительно посредством предоставления именно этим объектом свойств и методов. При инкапсуляции важным становится понятие области видимости, которая указывает уровень доступности класса, метода, свойства. Основные свойства:
Совместное хранение данных и функций внутри объекта
Сокрытие внутренней информации от пользователя
Изоляция пользователя от особенностей реализации
Полиморфизм – возможность оперировать объектами не обладая точным знанием их типов.
Void WriteValue(object o)
{
Console.Write(o.ToString());
}
Особенности .NET FrameWork в ООП. В .NET FrameWork используется компонентно-ориентированный подход к программированию: интеграция объектов производится на основе интерфейсов (вид класса), представляющих эти объекты как независимые компоненты. Принцип компонентно-ориентированного подхода – всякая сущность является объектом. В рамках одной программы возможность написания на нескольких языках программирования. Вводится понятие интер-операбельности – возможность интегрированной обработки гетерогенных данных поступающих из различных прикладных программ (обеспечивается с помощью CLI – межязыковой интерфейс, который поддерживает разработку программ на различных языках программирования). CLR – единая среда выполнения
Лекция 6.
Свойства и поля объектов
Обеспечивают доступ к содержащимся в объекте данным.
Данные, которые находятся в свойствах и полях образуют состояние этого объекта.
Поля и свойства имеют типы тех данных, которые описывают состояние объекта. Свойство отличается от поля тем, что они не предоставляют непосредственный доступ к данным, а взаимодействуют с данными, как правило, через поля. В поле для хранения информации о количестве кусочков сахара могут помещаться любые значения, ограниченные только типом этих данных. предположим в классе CuoOfCofee есть код, в котором описывается, какое количество кусочков сахара может быть в чашке кофе. Этот код управляется через специальное поле типа int (-2*10^9; 2*10^9). Очевидно, что не все эти значения будут иметь смысл и поэтому необходимо их благоразумно ограничить. В общем случае для доступа к состоянию (например, количество сахара) используются свойства, в ходе которых можно указывать ограничение и обработку значений, которые затем присваиваются полям. В свойствах можно указывать модификаторы доступа (public, private), тип доступа к данным (для чтения и/или записи).
Public class CupOfCofee
{
Int m_Sugar;
Public int Sugar
{
get
{
return m_Sugar;
}
set
{
if ((Value >=0)&&(Value <=5) m_Sugar = Value;
}
}
Public bool addSugar (int a)
{
int diff = 5 - m_Sugar;
if ((a<=diff)&&(a>0)
{
m_Sugar+=a;
return true;
}
Else return false;
}
}
CupOfCofee cup = new CupOfCofee();
cup.Sugar = 3;
int s = cup.Sugar;
Пусть кроме того класс CupOfCofee имеет свойство только для чтения Описание, в этом свойстве собирается вся информация об отдельно взятой чашке кофе. Все многообразие общедоступных членов класса (public) называется представлением класса.
Метод – предоставляемая объектом функциональная возможность. Методы выполняют сложные действия над самим объектом, обращаются к его полям, изменяют состояние объекта. Конструктор – частный случай метода, для которого ничего не указывается.
Жизненный цикл объекта
Каждый объект имеет свой жизненный цикл. Жизненный цикл можно представить в виде трех этапов:
Построение – при создании экземпляра объекта, его необходимо инициализировать. Этот процесс называется построением и выполняется с помощью метода – конструктора
Использование объекта – вызываются его методы, назначаются значения полям через свойства, объект реагирует на события и т.д.
Уничтожение – для уничтожения объекта может быть специальный метод, называемый деструктором.
Статические члены класса и члены экземпляра класса
Лекция 7.
Статические члены класса
Статические члены совместно используются разными экземплярами данного класса и поэтому могут считаться глобальными (едиными) для объектов класса. Статические свойства и поля позволяют обращаться к данным, которые не зависят не от каких экземпляров класса, а статические методы – выполнять код, связанный с типом класса…кроме того для использования статических членов нет необходимости нет необходимости создавать экземпляры класса.
class A
{
public static int Count;
public int Number;
}
A myclass = new A();
int myclass = A.Count;
int mynumber = myclass.Number;
В UML статические члены обозначаются подчеркиванием.
Статические конструкторы
Для применения статических членов может понадобиться их инициализация. Для статического члена можно указать начальное значение прямо в объявлении, но иногда нужна сложная инициализация или другие операции перед присваиванием значений или выполнением статических методов. Для этого существуют статические конструкторы. У класса могут быть один статический конструктор, который не может принимать никаких параметров. Он вызывается в следующих случаях:
При создании экземпляра класса, содержащего данный статический конструктор
При обращении к статическому члену класса, содержащему данный статический конструктор
В обоих случаях сначала вызывается статический конструктор, а потом создается экземпляр класса или выполняется обращение к статическому члену. Сколько бы экземпляров не создавалось, его конструктор вызывается только один раз.
Статические классы
Часто бывает использовать классы, содержащие только статические члены, для которых невозможно создавать объекты. Примером такого класса является класс Console. Проще всего в этой ситуации не делать все конструкторы класса приватными, а использовать статические классы. Статический класс может содержать только статические члены и не может содержать конструкторы экземпляров.
Интерфейсы
Интерфейс – коллекция общедоступных (а значит нестатических) методов и свойств, которые сгруппированы для инкапсуляции конкретной функциональности. Интерфейсы в отличие от классов не позволяют создавать экземпляры, не могут содержать код с реализацией их членов, они могут лишь определять их члены. Реализация членов осуществляется в классах, реализующих данный интерфейс.
В приведенном ранее примере класса CupOfCoffee, многие свойства и методы более общего назначения можно сгруппировать в интерфейс с именем IHotDrink. Такой интерфейс можно применять для других объектов, например, объектов класса CupOfTea. Это позволяет однотипно работать со всеми подобными объектами, хотя они могут иметь и собственные свойства. В UML интерфейсы реализуемые для классов изображаются с помощью кружочков. Классы, реализующие интерфейс IHotDrink выносятся в отдельный прямоугольник. Один класс может поддерживать несколько интерфейсов, а несколько классов могут поддерживать один и тот же интерфейс. После интерфейса, например, если имеется код, в котором используется объект с определенным интерфейсом и не используются другие методы и свойства этого объекта, то этот объект можно легко заменить другим, поддерживающим тот же самый интерфейс. Таким образом, с точки зрения интерфейса не будет разницы, объект какого класса будет обрабатываться, нет необходимости определять принадлежность объекта к какому-либо классу.
Освобождаемые объекты (IDisposable)
Объект, поддерживающий этот интерфейс, должен реализовывать метод Dispose. Метод предназначен для освобождения ресурсов, занимаемых объектом, которые могут оставаться занятыми вплоть до вызова деструктора. В языке имеется конструкция специальная для эффективного применения этого метода. Ключевое слово using позволяет инициализировать критические ресурсы объекта в кодовом блоке, по достижении которого автоматически вызывается метод Dispose.
<имя класса><имя переменной> = new <Имя класса>();
Using (<имя переменной>)
{
}
Когда надо использовать:
Работа с потоками данных (вывод данных и т.д.)
Многопоточная обработка информации с использованием класса Thread()
Наследование классов
Механизм наследования позволяет расширить или создавать конкретные классы от одного более общего класса.
При порождении от базового класса важным становится вопрос о доступности этих членов. Приватные члены базового класса не доступны из дочернего класса, а общедоступные – доступны. хотелось бы иметь такие члены класса, которые доступны из базового, дочернего классов, но не из внешнего класса. Такой уровень доступности называется protected. Помимо уровня защиты членов класса в производном классе можно определить способ наследования. Члены базового класса могут быть виртуальными, это значит что в производном классе может содержаться альтернативная реализация virtual члена. Эта альтернативная реализация не отменяет исходной реализации, но делает ее недоступной извне. При отсутствии альтернативной реализации любой внешний код обращается к коду этого члена в базовом классе.
Лекция 8.
Виртуальные члены могут быть приватными. Очевидно, что если бы виртуальный член был бы приватным, его нельзя было бы переопределить в производном классе, так как из производного класса приватный член базового класса не виден. Базовые члены могут определяться как абстрактные (abstract). Абстрактный класс не имеет никаких объектов – экземпляров. У абстрактных классов могут быть абстрактные члены, которые не могут иметь реализацию в этом абстрактном базовом классе. Реализация должна быть представлена в производных классах. В диаграмме UML имена абстрактных классов записываются курсивом.
Запечатанные классы (scaled). Такие классы не могут выступать в роли базового класса и не могут иметь производных классов.
Одним из результатов наследования является наличие в производных классах методов и свойств, совпадающих с базовым классом, поэтому для экземпляров классов с общим базовым классом часто возможно применять идентичный синтаксис.
Cow MyCow = new Cow();
Chicken myChicken = new Chicken();
MyCow.EatFood();
mychicken.EatFood();
Animal myAnimal = myCow(); //полиморфизм myAnimal.Moo(); //не работает
Cow myNewCow = (Cow)myAnimal;
myNewCow.Moo();
Полиморфизм дает существенный выигрыш в количестве кода при выполнении действий с различными объектами, происходящими из одного класса. Полиморфизм может применяться не только в отношении классов, имеющих одинаковый родительский класс, но и в отношении дочерних, внучатых, правнучатых… классов. В c# все классы порождаются от базового класса object, который является корневым в иерархии классов. Наиболее часто используется метод класса object – ToString().
Полиморфизм интерфейсов. Создавать экземпляры интерфейсов таким же образом как экземпляры объектов нельзя, но можно создать переменную типа интерфейса, и затем использовать ее для обращения к методам и свойствам, предоставляемым этим интерфейсом. Предположим, что вместо базового класса Animal, метод EatFood помещен в интерфейс IConsume. Этот интерфейс могут поддерживать и класс Cow и класс Chicken, только каждый из них должен иметь собственную реализацию метода EatFood (так как интерфейсы не содержат реализацию.). после этого к методу можно обращаться следующим образом.
Cow myCow = new Cow();
Chicken myChiken = new Chiken();
IConsume consume Interface;
consume Interface = myCow;
consume Interface.Eat.Food();
consume Interface = myChicken;
consume Interface.Eat.Food();
Это пример простого способа для однотипного вызова различных методов, которые не зависят от общего базового класса. Производные классы наследуют интерфейсы, поддерживаемые их базовым классом. В примере интерфейс IConsume может поддерживаться как классом Animal, так и классами Cow и Chicken. Однако, классы с общим базовым классом необязательно имеют общие интерфейсом, и классы имеющие одинаковые интерфейсы необязательно имеют один общий класс. Наследование является простым отношением между объектами (базовый класс полностью отражен в производном классе, производный класс имеет доступ к protected членам базового класса). Однако возможны более сложные ситуации:
Включение: один класс содержит другой, отношения похожи на наследование, но дозволено содержащему классу управлять доступом к членам содержащегося класса, и даже выполнять дополнительную обработку перед использованием этих членов.
Коллекции: один класс выступает в роли контейнера для нескольких экземпляров другого класса. Это похоже на массивы объектов, но у коллекций имеются специфические возможности: индексация, поиск, сравнение, поиск по паре «ключ - назначение», сортировка и т.д.
А)Включение легко достигается использованием поля члена для хранения экземпляра объекта. Это поле может быть общедоступным, и тогда пользователи содержащегося объекта будут иметь доступ к предоставляемым им методам и свойствам, но доступа к внутренним деталям класса через производный класс (как в обычном наследовании не будет)
Б) содержащийся внутри объекта член можно сделать приватным, в этом случае ни один из его членов не будет доступен пользователям непосредственно, даже если они являются общедоступными. В этом случае обращаться к этим членам можно с помощью членов класса – контейнера. Этот способ позволяет полностью управлять тем, какие члены содержащегося внутри класса должны предоставляться, а также выполнять дополнительную обработку в членах класса – контейнера при обращении к членам содержащегося класса.
Пример:
Представление включения в UML.
Класс Cow содержит класс Adder, с общедоступным методом Milk. Объект Cow может вызвать этот метод в составе своего метода SupplyMilk? Но пользователям объекта Cow такие детали не видны. Содержащиеся внутри других классов классы в UML отображаются связующими линиями. В случае простого включения, обозначается мощность включения один к одному: один экземпляр Cow содержит один экземпляр Adder. Для большей наглядности объект Udder может быть изображен в виде приватного поля класса Cow.
Лекция 9.
Коллекции
Коллекции – массив, с некоторыми дополнительными возможностями. Коллекции реализуются в виде классов, их имена часто представляют собой множественное число имени хранимых объектов. Отличие от массивов состоит в том, что размеры коллекций заранее не устанавливаются; добавление, и удаление элементов в коллекцию происходит с помощью методов add и remove, имеют item, который отображает значение.
(В UML)Числа на концах связующих линий указывают, что один объект Animals может содержать 0 или больше объектов Animal.
Перегрузка операций
Класс в Animals можно добавить новое свойство Weight. Перегрузка операций позволяет предоставить логику неявного использования свойства Weight, чтобы можно было упростить пример (1) и получить (2):
1)if (cowA.Weight>cowB.Weight)
{
}
2)if (cowA>cowB)
{
}
В примере операция «больше» перегружена. Перегруженной так же называется операция, для которой написан выполняющий её код. Этот код добавляется в определение одного из классов, для экземпляров которого должна выполняться перегрузка операции. Аналогично можно добавлять перегрузку операций для работы с разными классами. Перегрузка возможна только для операций, существующих в языке C#; новые операции создавать нельзя.
События
Объекты при работе могут генерировать и обрабатывать события (event’ы).События важны тем, что позволяют выполнять определенные действия в других частях кода, например, при добавлении объекта Animal в коллекцию Animals, может понадобиться выполнить определенный код, не являющийся ни частью кода Animals, ни частью того кода, который вызывает метод Add. Для этого необходимо добавить в код обработчик события – особую функцию, которая вызывается при возникновении события. Нужно настроить этот обработчик, чтобы он ожидал возникновения этого события.
class A
{
selectEvent;
}
class B
{
SelectEvent
{
...
}
}
С помощью событий можно создавать управляемые событиями приложения, которые гораздо более гибки в использовании, например все Windows приложения полностью зависят от событий.
Ссылочные типы и типы значений
Данные в C# сохраняются в переменных одним из двух способов, которые зависят от типов самой переменной: ссылка или значение. Типы значений хранят себя и свое значение в одном месте в УЧ, ссылочные типы хранят ссылку в УЧ, в которой хранится их содержимое.
Ссылочные типы допускают NULL значения. Animal myAnimal; //myAnimal == NULL
Одно из главных отличий между типами значений и ссылочными типами, состоит в том, что типы значений всегда содержат значение, а ссылочные типы могут не содержать их. Можно создать тип значений, ведущий себя в этом отношении подобно ссылочному типу (с поддержкой NULL), путем использования типов, допускающих нулевые значения (nullable). Единственными простыми ссылочными типами являются string и object.
Понятие |
Основное |
Объекты и классы: |
Классы – определение типов, которые используются для создания объектов. Объекты могут содержать данные и/или предоставлять операции для выполнения в других частях кода. Данные можно сделать доступными для внешнего кода с помощью свойств, а операции – с помощью методов. Свойства и методы класса называются членами класса. Члены класса могут иметь на чтение, и/или запись. Члены класса могут быть общедоступными или приватными. |
Жизненный цикл объекта |
Объект создается с помощью вызова одного из конструкторов (специальный метод в классе). Когда объект становится ненужным он уничтожается с помощью деструктора. |
Статические члены и члены экземпляров |
Члены экземпляров доступны только в объектах экземпляров класса. Статические члены доступны только непосредственно через определение класса, они не связаны ни с каким экземпляром класса. |
Интерфейсы |
Интерфейс – коллекция общедоступных свойств и методов, в которой могут быть реализованы в классе. Переменные с типом экземпляр класса можно присвоить значение любого объекта, определение класса которого реализует этот интерфейс. Тогда через эту переменную доступны определенные в данном интерфейсе |
Наследование |
Механизм порождения, определения одного класса на основе другого. Дочерний наследует члены родительского. Дочерний не может наследовать приватные члены родителя, но можно определить защищенные члены, доступные как внутри самого класса, так и внутри классов, порожденных от данного класса. Дочерние классы могут перекрывать члены, определенные в родительском классе как виртуальные. В C# на верхушке иерархии классов находится класс Object. |
Полиморфизм |
Все объекты, созданные на основе порожденного класса можно считать экземплярами родительского класса |
Отношение между объектами и дополнительные возможности |
Объекты могут содержать другие объекты, а также могут представлять собой коллекции других объектов. Для работы с объектами в выражениях можно определить способ их обработки операциями с помощью перегрузки операций. Объекты могут предоставлять события которые генерируются в каких то внутренних процессах а клиентский код может реагировать на события с помощью обработчиков событий |
UML |
Широко распространенный язык схематичного представления внутренней структуры программ на ООП |
Лекция 10.