Объектно-ориентированное программирование (ООП). В такой формулировке теряются анализ достоинств и недостатков
- ООП, как идеология программирования. Отличия от предшествующих подходов, применяемых в программировании ранее.
В такой формулировке теряются анализ достоинств и недостатков. Просто изложишь концепцию ООП и отличия и все. Идеология не разрывна с технологией. А уж если говорить о «подходов, применяемых в программировании ранее», то сюда включаются и программирование во внутренних кодах – когда еще не было языков программирования. J
А какие ты имеешь ввиду «предшествующие» подходы? Структурное программирование? Модульное программирование? Так и то и другое в себя ООП включило?
- Основные понятия ООП: класс, объект, поле, свойство, метод, событие. Реализация событий с помощью модели делегатов[*].
Это, я думаю, для ПОДАВЛЯЮЩЕГО кол-ва студентов СОВЕРШЕННО не понятно. Это я даже на лекциях не давал (только упоминал) – бесполезно – не проникнутся этим пока не попробуют руками. Да и скажи – ты сама когда-нибудь использовала делегатов? Я – нет.
- Понятие класса в ООП. Синтаксис объявления класса. Члены класса.
- Объекты в ООП. Принадлежность объекта типу (связь между типом и объектом). Жизненный цикл объектов: создание и разрушение объектов. Garbage Collector и разрушение объектов.
- Конструкторы: понятие, назначение, примеры применения. Параметризованные конструкторы. Конструкторы «по-умолчанию». Скрытые (private) конструкторы.
О скрытых я не рассказывал.
- Инкапсуляция: понятие, назначение, примеры применения. Ограничение области видимости членов класса (private, public, protected, internal).
- Инкапсуляция. Реализация механизма инкапсуляции через свойства. Функции-аксессоры (set, get). Отсутствие или ограничение области видимости одного из аксессоров.
- Наследование: понятие, назначение, примеры применения. Поведение различных членов класса при наследовании. Совпадения сигнатур методов при наследовании.
- Агрегация: понятие, назначение, примеры применения. Отличия от наследования. Жизненный цикл агрегируемых объектов.
- Методы класса. Сигнатура метода. Абстрактные (abstract), виртуальные (virtual) и перезаписанные (override) методы. Статические (static) методы классов и особенности их применения.
- Перегрузка операций: понятие, назначение, примеры применения. Перегрузка арифметических и логических операций. Особенности перегрузки операции равенства (==).
- Полиморфизм: понятие, назначение, примеры применения. Суть принципа «один интерфейс – множество методов».
Но это же не так! Перегрузка это тоже полиморфизм. А интерфейсы различные.
- Исключительные ситуации: понятие, назначение, примеры применения. Иерархия исключений. Создание (throw) и перехват (try-catch-finally) объектов-исключений. Способы реагирования на исключительные ситуации. Исключения, которые нельзя перехватить.
- Интерфейсы: понятие, назначение, примеры применения. Реализация интерфейсов. Приведение к интерфейсу. Коллизия имен при реализации двух и более интерфейсов. Назначение интерфейсов IComparable, IClonable, ISerializeable.
- Функциональный тип – делегаты: понятие, назначение, примеры применения. Функция, как экземпляр делегата. Делегат, как свойство класса.
Повторюсь – о делегатах подробно не рассказывал.
Возможности языка C# и платформы .NET
- Программный проект: консольный, оконный. Файлы, составляющие проект. Исполняемые файлы (*.ЕХЕ). Понятие «сборки» в .NET.
- Система типов языка C#. Размерные (value-type) и ссылочные (reference-type) типы. Семантика присваивания. Преобразования между ссылочными и размерными типами. «Упаковка-распаковка» типов (boxing, unboxing).
- Соглашение о совместимости и преобразование типов. Явные и неявные преобразования. Класс Convert.
- Переменные и выражения. Области видимости и жизни переменных. Глобальные и локальные переменные. Константы.
- Операции в выражениях, приоритет операций. Операции sizeof и typeof. Операция new.
- Методы арифметических классов. Операции сдвига.
- Логические операции, условные выражения. Операции проверки типа и приведения к типу.
- Составные типы данных, массивы, списки. Многомерные и вложенные (jagged) массивы. Класс Array. Семантика присваивания массивов.
- Строки постоянной длины (string и String) и построитель строк (StringBuilder). Операции над строками.
- Структуры (struct) и перечисления (enum). Отличия структур от классов.
Маша!
Ряд предложенных тобой вопросов на лекциях не рассматривались. Поэтому их выносить на экзамен не корректно.
Просто надо на будущее обсудить нам всем вместе твои предложения и тогда их давать на лекциях и спрашивать на зкзаменах.
Мы изучаем курс ООП, а не .Net. Поэтому о .Net я говорил только когда это было уж сильно необходимо. Это не задача данного курса. И включать специфические вопросы о .Net мне представляется не областью курса.
Часть предложения — учел. Они выделены в вопросах синим цветом.
Относительно вопросов «Возможности языка и платфомы .NET» по пункту 1. см. выше. По пунктам 2-7, 9 – в большинстве они – перефразированные предыдущие вопросы. Пункт 8 – это САОД (следующий семестр – они же не знают еще, что такое списки – как же из об этом спрашивать).
А детальное разбиение в существующих вопросах – это же заготовка для экзаменационных билетах. Ты это сжала фактически до 6 пунктов – потом же надо будет снова из размножать, чтобы билеты не были сильно тождественны. J
Так что предлагаю усовершенствованных вариант вопросов, приведенный вначале. Если есть возражения – готов их выслушать.
А относительно того, что ввести вопросы со звездочкой – я ЗА.
Только их надо оформить отдельным списком. И там уже не важно – давалось это на лекциях или нет. И они не включаются в состав билетов.
А желающие могут просить экзаменатора об ответе на эти вопросы. Вот там можешь включить все что не вошло в билеты. Никаких с моей стороны ограничений. J
Даже интересно провести такой опыт.
С уважением
А.Е.
[*] Курсивом выделены вопросы повышенной сложности. При ответе на такой вопрос можно повысить свою оценку на экзамене или не отвечать на другой вопрос билета (на усмотрение экзаменатора).