19. C-sharp 13 26-11-2013

Created Tuesday 26 November 2013

  1. Интерфейсы
    1. Каждый программный модуль должен выполнять чётко ограниченную и назначенную ему роль. Это называется "связанность" (cohesive). Это касается как методов, так и классов.
    2. Разные методы в одном классе или классы (объекты) между собой должны быть настолько не связаны (независимы) насколько возможно (loosely coupling).
    3. Жёсткое связывание возникает тогда, когда в классе А возникает команда b = new B();
    4. Одним из способов ослабить связанность между объектами — это работать не с объектами, а с интерфейсами. Потому что интерфейс не создаёт объект, а описывает, с чем в принципе будет вестись работа.
    5. Параметры метода и имя это и есть интерфейс метода.
    6. Интерфейс это вид класса, но без реализации.
    7. При описании интерфейса как и в классе можно описать методы и свойства, однако когда в интерфейсе описывается метод, указыватся лишь имя метода и параметры. Никакого кода для метода писать нельзя. Образно:
      1. Есть интерфейс "Стоянка" и там можно "парковаться".
    8. Наследование, полиморфизм, ослабление связи между объектами + решение проблемы множественного наследования — всё это связано с интерфейсами.
    9. Вид программирования — interface-based programming.
    10. При объявлении интерфейса рекомендуется обозначать это заглавной буквой I в начале имени интерфейса.
  2. Динамические коллекции
    1. Это структуры данных, которые позволяют решать задачи следующего рода:
      1. В города каньоны, в них стоянки, они постоянно строятся (и каньоны), могут исчезать, на стоянках могут быть дополнительные места, их могут добавлять и отменять.
    2. using System.Collections;
      1. ArrayList
        1. Не типизирован. Все его объекты типа object
        2. ArrayList c = new ArrayList();
        3. c.Add(1);
        4. c.Add("asdf");
        5. c.Add(new ArrayList());
        6. Недостаток в том, что надо следить за типизацией элементов.
      2. Hashtable
        1. У каждого элемента не числовой индекс, а строковый ключ
      3. Для любой нетипизированной коллекции есть её типизированный эквивалент
        1. Динамические коллекции бывают 2х типов
          1. Generic — типизированные
          2. Non-Generic — нетипизированные
          3. Для Generic: Using System.Collections.Generic;
          4. При создании экземляра класса (Generic) передаётся в качестве параметра тип данных: List<int> c = new List<int>;
          5. Можно создавать сови Generic-классы.
      4. Не имеют встроенной многомерности.
      5. Методы:
        1. Add
        2. Insert
        3. Remove
        4. Count
      6. Очень полезная коллекция Dictionary!!!!!
  3. Наследование
    1. Полиморфизм и наследование тесно связаны
    2. Когда найдены классы второй шаг — понять, как эти классы связаны между собой (заодно определить, а класс ли это). Речь об архитектурной, а не технической связи.
    3. Два вида (архитектурной) связи
      1. Аггрегация — "part-of"
        1. Реализация — инкапсуляция, коллекции
        2. Иерархия по включению
      2. Наследование — "is a" (это есть ...)
        1. Ищутся классы, у которых есть общие характеристики
          1. Стол и стул отличаются, но и то, и другое относится к мебели имеет характеристику мебели (например — то, чем мебилируют квартиру)
          2. Мебель - абстрактное понятие, класс, к которому относятся разные более конкретные классы
    4. Наследование нужно для того, чтобы можно было повторно использовать методы.
    5. Иерархия наследования другого типа, чем аггрегации:
      1. Furniture
        1. Table
          1. Dinner table
    6. Иерархия из 3х уровней наследования уже считается большой для обычных задач (а больше 7 — точно есть ошибка)
    7. У класса наследника есть все методы и свойства класса родителя
    8. Если родитель абсолютно абстрактен — признак интерфейса
    9. Чем выше в иерархии наследования, тем более общие описания объекта (generalization) и наоборот (specialization)
    10. protected — для наследников public, для всех остальных private
      1. Вид частичной инкапсуляции
      2. Наследник не видит private — такие методы и свойства не наследуются
    11. Inherits — про классы
    12. Implements — про интерфейсы
    13. У интерфейса не указывают модификатор доступа
    14. Есть классы, предназначенные только для наследования — Abstract Classes
      1. Абстрактному классу нельзя сделать new
    15. Sealed class - этому классу нельзя наследовать (в остальном обычный класс)
      1. Прервать иерархию наследованию
  4. ДЗ:
    1. 5-й модуль по нашему учебнику
    2. Задачи на проектирование
      1. Спроектировать объектную модель геометрических фигур: прямоугольник, треугольник, круг, квадрат — с учётом того, что у любой фигуры можно вычислять площадь.
      2. Спроектиовать модель: калькулятор налогов, калькулятор банковской ссуды, калькулятор научный (просто употребить слово scientific), каждый из которых помимо особенностей умеет выполнять 4 арифметических действия.
      3. Спроектировать объектную модель Солнечной системы, где существует Солнце, существуют планеты, у планет спутники. Все эти небесные тела (!) имеют общие характеристики: масса, диаметр и орбита. (mine planets...)
      4. Курс 2124 — 10-й модуль: читайте внимательно!!!!!!!!!
      5. Построить объектную модель (всё, что умеем): в зоопарке есть клетки и загоны для животных. В клетках находятся хищники 2х типов: львы и волки. В загонах бегают травоядные животные типа антилоп и грызуны типа зайцев. Волки едят зайцев, львы едят антилоп. Антилопы и зайцы едят траву, которая растёт в загонах. Хищников кормят травоядными. Если лев съедает атилопу, его вес увеличивается на вес антилопы. То же самое происходит с волком (на вес зайца). Реализовать процесс кормёжки и процесс взвешивания.



Backlinks: