Экзамены
<<  Как пережить экзамены Нас ждут экзамены  >>
Экзамен: итоги
Экзамен: итоги
HALL OF FAME
HALL OF FAME
Количество оценок «отлично» по группам
Количество оценок «отлично» по группам
БАРС: расчет рейтинга для модуля 3
БАРС: расчет рейтинга для модуля 3
Темы лабораторных работ
Темы лабораторных работ
Повторение: контейнеры и файлы
Повторение: контейнеры и файлы
Пример использования класса List
Пример использования класса List
Чтение чисел из текстового файла – вар
Чтение чисел из текстового файла – вар
Чтение чисел из текстового файла – вар
Чтение чисел из текстового файла – вар
Наследование
Наследование
Возможности наследования
Возможности наследования
Синтаксис
Синтаксис
Public int ammo { // свойство get { return ammo; } set { if (value >
Public int ammo { // свойство get { return ammo; } set { if (value >
Daemon, наследник класса monster
Daemon, наследник класса monster
Вызов конструктора базового класса
Вызов конструктора базового класса
Конструкторы и наследование
Конструкторы и наследование
Наследование полей и методов
Наследование полей и методов
Совместимость типов при наследовании
Совместимость типов при наследовании
Пример раннего связывания
Пример раннего связывания
Раннее связывание
Раннее связывание
Раннее связывание
Раннее связывание
Позднее связывание
Позднее связывание
Пример позднего связывания
Пример позднего связывания
Позднее связывание
Позднее связывание
Полиморфизм
Полиморфизм
Применение виртуальных методов
Применение виртуальных методов
Пример полиморфного метода
Пример полиморфного метода
При описании классов рекомендуется определять в качестве виртуальных
При описании классов рекомендуется определять в качестве виртуальных
Абстрактные классы
Абстрактные классы
Применение абстрактных классов
Применение абстрактных классов
Бесплодные (финальные) классы
Бесплодные (финальные) классы
Класс object
Класс object
Открытые методы класса System
Открытые методы класса System
Пример переопределения метода Equals
Пример переопределения метода Equals
Рекомендации по программированию
Рекомендации по программированию
Виды взаимоотношений между классами
Виды взаимоотношений между классами
Наследование и вложение
Наследование и вложение
Модель включения-делегирования
Модель включения-делегирования

Презентация: «Экзамен: итоги». Автор: Mux. Файл: «Экзамен: итоги.ppt». Размер zip-архива: 343 КБ.

Экзамен: итоги

содержание презентации «Экзамен: итоги.ppt»
СлайдТекст
1 Экзамен: итоги

Экзамен: итоги

1

©Павловская Т.А. (СПб НИУ ИТМО)

2 HALL OF FAME

HALL OF FAME

1

Осика В. П.

1105

97,67

11

Кришталь Д. С.

1125

94,7

2

Шабаков Р. В.

1106

96,75

12

Барышок Е. С.

1106

94,47

3

Сорокин Р. С.

1101

96,25

13

Вагнер А. В.

1106

94,42

4

Казанцева А. И.

1105

95,92

14

Пасечников И. А.

1120

94,33

5

Петряков С. В.

1120

95,68

15

Довлад В. И.

1106

94,29

6

Шестель В. Р.

1121

95,5

16

Широбоков Е. С.

1120

94,17

7

Белов Е. Ю.

1121

95,42

17

Коссович Т. А.

1120

94

8

Васильев С. Е.

1101

95,02

18

Кудряшов А. А.

1121

93,88

9

Чильдинов А. А.

1101

94,89

19

Кузичкина А. О.

1100

93,26

10

Козин И. О.

1125

94,8

20

Соколов А. М.

1121

93

2

©Павловская Т.А. (СПб НИУ ИТМО)

3 Количество оценок «отлично» по группам

Количество оценок «отлично» по группам

3

©Павловская Т.А. (СПб НИУ ИТМО)

4 БАРС: расчет рейтинга для модуля 3

БАРС: расчет рейтинга для модуля 3

9 (3 * 3 шт)

15 (5 * 3 шт)

6

10

7

12

3

5

25

42

Вид учебной нагрузки

Баллы

Баллы

min

max

Вып. лаб. работ (3 штуки)

Рубежный контроль (теория + задача)

Тестирование в ЦДО

Личностные качества

Итог

4

Т.А. Павловская (СПбГУ ИТМО)

5 Темы лабораторных работ

Темы лабораторных работ

Контейнерные классы и работа с файлами (задание на сайте pta-ipm.narod.ru) Классы и операции (задание в учебнике, лаб. № 8) Наследование (3 уровня сложности - задание на сайте pta-ipm.narod.ru)

Контейнерные классы и работа с файлами Написать программу, которая считывает целые числа из файла, имя которого задается с клавиатуры, в параметризованную коллекцию List<> и выполняет с ней действия, указанные в конкретном варианте задания. Вариант взять из лабораторной работы «Одномерные массивы» (НЕ свой старый! Например, +1). Предусмотреть обработку исключений. Проверить правильность работы программы для всех файлов каталога LAB_FILES.

5

©Павловская Т.А. (СПбГУ ИТМО)

6 Повторение: контейнеры и файлы

Повторение: контейнеры и файлы

Stack

SortedList

LinkedList

List

Dictionary

ArrayList

HashTable

Queue

StringDictionary

StringCollection

6

©Павловская Т.А. (СПбГУ ИТМО)

7 Пример использования класса List

Пример использования класса List

using System; using System.Collections.Generic; namespace ConsoleApplication1{ class Program { static void Main() { List<int> lint = new List<int>(); lint.Add( 5 ); lint.Add( 1 ); lint.Add( 3 ); lint.Sort(); int a = lint[2]; foreach ( int x in lint ) Console.Write( x + " "); }}}

7

©Павловская Т.А. (СПбГУ ИТМО)

8 Чтение чисел из текстового файла – вар

Чтение чисел из текстового файла – вар

1

try { List<int> list_int = new List<int>(); StreamReader file_in = new StreamReader( @"D:\FILES\1024" ); Regex regex = new Regex( "[^0-9-+]+" ); List<string> list_string = new List<string>( regex.Split( file_in.ReadToEnd().TrimStart(' ') ) ); foreach (string temp in list_string) list_int.Add( Convert.ToInt32(temp) ); foreach (int temp in list_int) Console.WriteLine(temp); ... } catch (FileNotFoundException e) { Console.WriteLine("Нет файла" + e.Message); return; } catch (FormatException e) { Console.WriteLine(e.Message); return; } catch { … }

8

©Павловская Т.А. (СПбГУ ИТМО)

9 Чтение чисел из текстового файла – вар

Чтение чисел из текстового файла – вар

2

try { StreamReader file_in = new StreamReader( @"D:\FILES\1024" ); char[] delim = new char[] { ' ' }; List<string> list_string = new List<string>( file_in.ReadToEnd().Split( delim, StringSplitOptions.RemoveEmptyEntries )); List<int> list_int = list_string.ConvertAll<int>(Convert.ToInt32); foreach ( int temp in ist_int ) Console.WriteLine( temp ); ... } catch (FileNotFoundException e) { Console.WriteLine("Нет файла" + e.Message); return; } catch (FormatException e) { Console.WriteLine(e.Message); return; } catch { … }

9

©Павловская Т.А. (СПбГУ ИТМО)

10 Наследование

Наследование

10

©Павловская Т.А. (СПбГУ ИТМО)

11 Возможности наследования

Возможности наследования

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

11

©Павловская Т.А. (СПбГУ ИТМО)

12 Синтаксис

Синтаксис

[ атрибуты ] [ спецификаторы ] class имя_класса [ : предки ] тело класса class Monster { ... // кроме private и public, // используется protected } class Daemon : Monster { ... } Класс в C# может иметь произвольное количество потомков Класс может наследовать только от одного класса-предка и от произвольного количества интерфейсов. При наследовании потомок получает [почти] все элементы предка. Элементы private не доступны потомку непосредственно. Элементы protected доступны только потомкам.

Класс - только один интерфейс - м.Б. Несколько

12

©Павловская Т.А. (СПбГУ ИТМО)

13 Public int ammo { // свойство get { return ammo; } set { if (value >

Public int ammo { // свойство get { return ammo; } set { if (value >

0) ammo = value; else ammo = 0; } } public string name { // свойство get { return name; } } public void passport() // метод { console.Writeline( "monster {0} \t health = {1} \ ammo = {2}", name, health, ammo ); } public override string tostring(){ string buf = string.Format( "monster {0} \t health = {1} \ ammo = {2}", name, health, ammo); return buf; } string name; // private поля int health, ammo; }

Сквозной пример класса

Class monster { public monster() // конструктор { this.Name = "noname"; this.Health = 100; this.Ammo = 100; } public monster( string name ) : this() { this.Name = name; } public monster( int health, int ammo, string name ) { this.Name = name; this.Health = health; this.Ammo = ammo; } public int health { // свойство get { return health; } set { if (value > 0) health = value; else health = 0; } }

13

©Павловская Т.А. (СПбГУ ИТМО)

14 Daemon, наследник класса monster

Daemon, наследник класса monster

Class daemon : monster { public daemon() { brain = 1; } public daemon( string name, int brain ) : base( name ) this.Brain = brain; } public daemon( int health, int ammo, string name, int brain ) : base( health, ammo, name ) { this.Brain = brain; } new public void passport() { console.Writeline( "daemon {0} \t health ={1} ammo ={2} brain ={3}", name, health, ammo, brain ); } public void think() { console.Write( name + " is" ); for ( int i = 0; i < brain; ++i ) console.Write( " thinking" ); console.Writeline( "..." ); } int brain; // закрытое поле }

Class monster { public monster() // конструктор { this.Name = "noname"; this.Health = 100; this.Ammo = 100; } public monster( string name ) : this() { this.Name = name; } public monster( int health, int ammo, string name ) { this.Name = name; this.Health = health; this.Ammo = ammo; }

// В классе monster было: public void passport() // метод { console.Writeline( "monster {0} \t health = {1} \ ammo = {2}", name, health, ammo ); }

14

©Павловская Т.А. (СПбГУ ИТМО)

15 Вызов конструктора базового класса

Вызов конструктора базового класса

public Daemon( string name, int brain ) : base( name ) // 1 { this.brain = brain; } public Daemon( int health, int ammo, string name, int brain ) : base( health, ammo, name ) // 2 { this.brain = brain; }

15

©Павловская Т.А. (СПбГУ ИТМО)

16 Конструкторы и наследование

Конструкторы и наследование

Конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы (созданные программистом или системой). Порядок вызова конструкторов: Если в конструкторе производного класса явный вызов конструктора базового класса отсутствует, автоматически вызывается конструктор базового класса без параметров. Для иерархии, состоящей из нескольких уровней, конструкторы базовых классов вызываются, начиная с самого верхнего уровня. После этого выполняются конструкторы тех элементов класса, которые являются объектами, в порядке их объявления в классе, а затем исполняется конструктор класса. Если конструктор базового класса требует указания параметров, он должен быть вызван явным образом в конструкторе производного класса в списке инициализации.

16

©Павловская Т.А. (СПбГУ ИТМО)

17 Наследование полей и методов

Наследование полей и методов

Поля, методы и свойства класса наследуются. При желании заменить элемент базового класса новым элементом следует использовать ключевое слово new: // метод класса Daemon (дополнение функций предка) new public void Passport() { base.Passport(); // использование функций предка Console.WriteLine( brain ); // дополнение }

// Метод класса monster public void passport() { console.Writeline( "monster {0} \t health = {1} \ ammo = {2}", name, health, ammo ); }

// Метод класса daemon (полная замена) new public void passport() { console.Writeline( "daemon {0} \ health ={1} ammo ={2} brain ={3}", name, health, ammo, brain ); }

17

©Павловская Т.А. (СПбГУ ИТМО)

18 Совместимость типов при наследовании

Совместимость типов при наследовании

Объекту базового класса можно присвоить объект производного класса: предок потомок Это делается для единообразной работы со всей иерархией. При преобразовании программы из исходного кода в исполняемый используется два механизма связывания: раннее – early binding – до выполнения программы позднее (динамическое) – late binding – во время выполнения

18

©Павловская Т.А. (СПбГУ ИТМО)

19 Пример раннего связывания

Пример раннего связывания

class T { T(int i) { this.i = i; } draw { вывод "ТT" } erase move { erase, ->, draw } number { вывод i } protected int i; } class X : T { X(int i) : base(i) {} new draw {вывод "XX" } new erase resize } // все методы public

// Одиночный объект: X x = new X(15); x.Draw(); // XX x.Number(); // 15 x.Move() // TT // массив объектов баз. Типа: T mas = new t[n]; mas[0] = new T(10); mas[1] = new T(20); mas[2] = new X(15); mas[3] = new X(25); foreach (T t in mas) t.Number() // 10 20 15 25 foreach (T t in mas) t.Draw() // TT TT TT TT // t.Resize – не работает

19

©Павловская Т.А. (СПбГУ ИТМО)

20 Раннее связывание

Раннее связывание

методы класса Т

Вызывающий метод

draw

Создание объекта x класса X … x.draw x.number x.move

erase

move

number

Методы класса X

draw

erase

resize

20

©Павловская Т.А. (СПбГУ ИТМО)

21 Раннее связывание

Раннее связывание

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

Monster Vasia = new Daemon(); Vasia.Passport();

21

©Павловская Т.А. (СПбГУ ИТМО)

22 Позднее связывание

Позднее связывание

Происходит на этапе выполнения программы Признак – ключевое слово virtual в базовом классе: virtual public void Passport() ... Компилятор формирует для virtual методов таблицу виртуальных методов. В нее записываются адреса виртуальных методов (в том числе унаследованных) в порядке описания в классе. Для каждого класса создается одна таблица. Связь с таблицей устанавливается при создании объекта с помощью кода, автоматически помещаемого компилятором в конструктор объекта. Если в производном классе требуется переопределить виртуальный метод, используется ключевое слово override: override public void Passport() ... Переопределенный виртуальный метод должен обладать таким же набором параметров, как и одноименный метод базового класса.

22

©Павловская Т.А. (СПбГУ ИТМО)

23 Пример позднего связывания

Пример позднего связывания

// Одиночный объект: X x = new X(15); x.Draw(); // XX x.Number(); // 15 x.Move() // XX // массив объектов баз. Типа: T mas = new t[n]; mas[0] = new T(10); mas[1] = new T(20); mas[2] = new X(15); mas[3] = new X(25); foreach (T t in mas) t.Number() // 10 20 15 25 foreach (T t in mas) t.Draw() // TT TT XX XX

class T { T(int i) virtual draw { "ТT" } virtual erase move { erase, …, draw } number { i } protected int i; } class X : T { X(int i) override draw { "XX" } override erase resize } // все методы public

23

©Павловская Т.А. (СПбГУ ИТМО)

24 Позднее связывание

Позднее связывание

Виртуальные методы T

Вызывающий метод

VMT для T

draw

методы класса Т

Создание объекта x класса X … x.draw x.number x.move t.move

number

erase

move

Виртуальные методы X

VMT для X

draw

Методы класса X

erase

resize

24

Адрес draw

Адрес erase

Адрес draw

Адрес erase

©Павловская Т.А. (СПбГУ ИТМО)

25 Полиморфизм

Полиморфизм

Виртуальные методы базового класса определяют интерфейс всей иерархии. Интерфейс может расширяться в потомках за счет добавления новых виртуальных методов (нежелательно). Переопределять виртуальный метод в каждом из потомков не обязательно: если он выполняет устраивающие потомка действия, метод наследуется. Механизм вызова виртуального метода: из объекта берется адрес таблицы вирт. методов соотв. класса из нее выбирается адрес метода ему передается управление. Итак, при использовании виртуальных методов из всех одноименных методов иерархии всегда выбирается тот, который соответствует фактическому типу вызвавшего его объекта. Виртуальные методы — основное проявление полиморфизма.

Monster Vasia = new Daemon(); Vasia.Passport();

25

©Павловская Т.А. (СПбГУ ИТМО)

26 Применение виртуальных методов

Применение виртуальных методов

Виртуальные методы используются: при работе с производными классами через ссылку на базовый класс; при передаче объектов в методы в качестве параметров: В параметрах метода описывается объект базового типа, а при вызове в нее передается объект производного класса. Виртуальные методы, вызываемые для параметра метода, будут соответствовать типу аргумента, а не параметра. Методы, работающие с полиморфными объектами, называют полиморфными.

26

©Павловская Т.А. (СПбГУ ИТМО)

27 Пример полиморфного метода

Пример полиморфного метода

КакойтоМетод ( Т t ) { t.draw(); … }

Т - предок Х - потомок в обоих классах есть виртуальный метод draw T t = new T(10); X x = new X(20); КакойтоМетод( t ) ? вызывается draw из Т КакойтоМетод( x ) ? вызывается draw из X

27

©Павловская Т.А. (СПбГУ ИТМО)

28 При описании классов рекомендуется определять в качестве виртуальных

При описании классов рекомендуется определять в качестве виртуальных

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

28

©Павловская Т.А. (СПбГУ ИТМО)

29 Абстрактные классы

Абстрактные классы

Абстрактные классы предназначены для представления общих понятий, которые предполагается конкретизировать в производных классах. Абстрактный класс задает интерфейс для всей иерархии. Абстрактный класс задает набор методов, которые каждый из потомков будет реализовывать по-своему. Методы абстрактного класса могут иметь пустое тело (объявляются как abstract). Абстрактный класс может содержать и полностью определенные методы (в отличие от интерфейса). Если в классе есть хотя бы один абстрактный метод, весь класс должен быть описан как abstract. Если класс, производный от абстрактного, не переопределяет все абстрактные методы, он также должен описываться как абстрактный.

29

©Павловская Т.А. (СПбГУ ИТМО)

30 Применение абстрактных классов

Применение абстрактных классов

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

30

©Павловская Т.А. (СПбГУ ИТМО)

31 Бесплодные (финальные) классы

Бесплодные (финальные) классы

Ключевое слово sealed позволяет описать класс, от которого, в противоположность абстрактному, наследовать запрещается: sealed class Spirit { ... } // class Monster : Spirit { ... } ошибка! Большинство встроенных типов данных описано как sealed. Если необходимо использовать функциональность бесплодного класса, применяется не наследование, а вложение, или включение: в классе описывается поле соответствующего типа. Поскольку поля класса обычно закрыты, описывают метод объемлющего класса, из которого вызывается метод включенного класса. Такой способ взаимоотношений классов известен как модель включения-делегирования (об этом – далее).

31

©Павловская Т.А. (СПбГУ ИТМО)

32 Класс object

Класс object

Корневой класс System.Object всей иерархии объектов .NET, называемый в C# object, обеспечивает всех наследников несколькими важными методами. Производные классы могут использовать эти методы непосредственно или переопределять их. Класс object используется непосредственно: при описании типа параметров методов для придания им общности; для хранения ссылок на объекты различного типа.

32

©Павловская Т.А. (СПбГУ ИТМО)

33 Открытые методы класса System

Открытые методы класса System

Object

public virtual bool Equals(object obj); возвращает true, если параметр и вызывающий объект ссылаются на одну и ту же область памяти public static bool Equals(object ob1, object ob2); возвращает true, если оба параметра ссылаются на одну и ту же область памяти public virtual int GetHashCode(); формирует хэш-код объекта и возвращает число, однозначно идентифицирующее объект public Type GetType(); возвращает текущий полиморфный тип объекта (не тип ссылки, а тип объекта, на который она в данный момент указывает) public static bool ReferenceEquals(object ob1, object ob2); возвращает true, если оба параметра ссылаются на одну и ту же область памяти public virtual string ToString() возвращает для ссылочных типов полное имя класса в виде строки, для значимых — значение величины, преобразованное в строку. Этот метод переопределяют, чтобы выводить информацию о состоянии объекта.

33

©Павловская Т.А. (СПбГУ ИТМО)

34 Пример переопределения метода Equals

Пример переопределения метода Equals

// Сравнение значений, а не ссылок public override bool equals( object obj ) { if ( obj == null || gettype() != obj.Gettype() ) return false; monster temp = (monster) obj; return health == temp.Health && ammo == temp.Ammo && name == temp.Name; } public override int gethashcode() { return name.Gethashcode(); }

34

©Павловская Т.А. (СПбГУ ИТМО)

35 Рекомендации по программированию

Рекомендации по программированию

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

35

©Павловская Т.А. (СПбГУ ИТМО)

36 Виды взаимоотношений между классами

Виды взаимоотношений между классами

Наследование Специализация (Наследник является специализированной формой предка) Спецификация (Дочерний класс реализует поведение, описанное в предке) Конструирование или Варьирование (Наследник использует методы предка, но не является его подтипом; предок и потомок являются вариациями на одну тему – например, прямоугольник и квадрат) Расширение (В потомок добавляют новые методы, расширяя поведение предка) Обобщение (Потомок обобщает поведение предка) Ограничение (Потомок ограничивает поведение предка) Вложение композиция агрегация

Классификация Тимоти Бадда

36

©Павловская Т.А. (СПбГУ ИТМО)

37 Наследование и вложение

Наследование и вложение

Наследование класса Y от класса X чаще всего означает, что Y представляет собой разновидность класса X (более конкретную, частную концепцию). Вложение является альтернативным наследованию механизмом использования одним классом другого: один класс является полем другого. Вложение представляет отношения классов «Y содержит X» или «Y реализуется посредством Х» и реализуется с помощью модели «включение-делегирование».

37

©Павловская Т.А. (СПбГУ ИТМО)

38 Модель включения-делегирования

Модель включения-делегирования

class Двигатель {public void Запуск() {Console.WriteLine( "вжжж!!" ); }} class Самолет { public Самолет() { левый = new Двигатель(); правый = new Двигатель(); } public void Запустить_двигатели() { левый.Запуск(); правый.Запуск(); } Двигатель левый, правый; } class Class1 { static void Main() { Самолет АН24_1 = new Самолет(); АН24_1.Запустить_двигатели(); } }

Результат работы программы: вжжж!! вжжж!!

38

©Павловская Т.А. (СПбГУ ИТМО)

«Экзамен: итоги»
http://900igr.net/prezentacija/pedagogika/ekzamen-itogi-96688.html
cсылка на страницу
Урок

Педагогика

135 тем
Слайды