Модул 5. Обектно-ориентирано програмиране

Материалиarrow-up-right | Задачиarrow-up-right | Решенияarrow-up-right | Видеоarrow-up-right

Съдържание

Unit Testing

Get started with unit testing: https://docs.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2019

Visual Studio Team Tests (VSTT)

AAA = Arrange + Act + Assert

Atributes

Asserts

Зависимости

  • Добрa практики за избягване на взаимообвързване на класовете е използването на интерфейсти.

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

Имитиране на обекти

Userfull Reading:

Шаблони

Интерфейси

Ограничители

Ограничаване до референтен тип

Ограничаване до примитивен тип

Ограничаване до конструктор

Ограничаване до статичен базов клас

Ограничаване до шаблонен базов клас

Наследяване

Наследяващият клас получава всички членове от родителския си клас.

Конструкторите не се наследяват, но може да се използват.

Подкласовете наследават данните с модификатори за достъп (public) и (protected), но не и тези с (private).

Виртуалнита методи позволяват пренаписване.

Абстракция и интерфейси

Абстракцията се постига чрез интерфейси и абстрактни класове и представлява процес на скриване на подробностите на имплементацията и показване само на функционалностите към потребителя.

Абстрактен клас
Интерфейс

Класът може да наследи само един абстрактен клас.

Класът може да имплементира няколко интерфейса.

Абстрактните класове могат да предоставят целия код и/или само детайлите, които трябва да се презапишат.

Интерфейсът не може да предоставя никакъв код, предоставя само описание.

Абстрактния клас може да съдържа модификатори за достъп

Интерфейсите нямат модификатори за достъп. Всичко е публично по подразбиране.

Ако множество имплементации са от сходен вид и имат общо поведение или статут, то абстрактния клас е по-добър избор.

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

Абстрактният клас може да притежава полета и константи

Не поддържа полета

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

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

Презареждане (overloading)

Методи с едно и също име, но различни сигнатури.

Презаписване (overriding)

Създаване на метод със същото име и сигнатура в подклас.

Итератори

IEnumerable

Интерфейс за обхождане на колекция

IEnumerator

Предоставя последователно, еднопосочно обхождане на колекция от произволен тип

  • MoveNext() = премества итератора към следваща позиция

  • Reset() = връща итератора на начална позиция

  • Current = връща елемента от колекцията на текущата позиция на итератора

Компаратори

IComparable

IComparer

Отражение на типове (Reflection)

Техника на програмиране, при която компютърни програми мога да третират други програми като свои данни.

Type

Основен начин за достъп до метаданните.

Name

Предоставя името на класа.

Class and Interface

CreateInstance

Създава екземпляр от класа чрез извикване на конструктора, който най-добре пасва на указаните параметри.

Fields

Предоставя публичните полета

Предоставя всички полета

Field Type

Получаване на името и типа на полето

Access Modifiers

Constructors

Create New Object Instances

Methods

Достъп до параметрите на метод и връщания тип данни

Извиква методи

Функционално програмиране

Lambda Expressions

Lambda Functions

израз
еквивален

x => x / 2

static int Func(int x) { return x / 2; }

x => x != 0

static bool Func(int x) { return x != 0; }

() => 42

static int Func() { return 42; }

(x, y) => x+y

static int Func(int x, int y) { return x+y; }

LINQ & Collections

Изключения (Exception)

Прихващане на изключенията

Типове

  • System.ArgumentException

  • System.FormatException

  • System.NullReferenceException

  • System.OutOfMemoryException

  • System.StackOverflowException

Хвърляне на изключения

Типове

  • ArgumentException

  • ArgumentNullException

  • ArgumentOutOfRangeException

  • NotSupportedException

  • NotImplementedException

Потоци (Streams)

Четене от файл

Запис във файл

Стандартни потоци

File Stream

Memory Stream

Network Stream

Last updated