23
Хакасский государственный университет им. Н.Ф. Катанова Структуры и алгоритмы обработки данных Лекция: Абстрактные типы данных Николай Гребенщиков, www.grebenshikov.ru

Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Embed Size (px)

Citation preview

Page 1: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Хакасский государственный университет им. Н.Ф. Катанова

Структуры и алгоритмы обработки данных

Лекция: Абстрактные типы данных

Николай Гребенщиков, www.grebenshikov.ru

Page 2: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Основные понятния

• Тип данных

• Структура данных

• Абстрактный тип данных

• Класс

1

Page 3: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Тип данных переменной - множество значений, которыеможет принимать эта переменная.

Java-код:1 int a = 5;2 double b = 0.5;3 string c = ‘‘abc’’;4 boolean d = true;

2

Page 4: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Структура данных - набор переменных, возможно, различ-ных типов данных, объединенных определенным образом.Структура данных создается путем задания имени совокуп-ности (или агрегату) ячеек.

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

3

Page 5: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Фундаментальные структуры данных

• Массив

• Запись

• Файл

4

Page 6: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Массив - последовательность ячеек определенного типа.

Код на Java:1 int a[] = new int[5];2 boolean d[] = new boolean[5];

d:

1 2 3 4 5true false true true false

d[3] = false

5

Page 7: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Запись - это ячейка, состоящая из нескольких ячеек (по-лей), значение которых могут быть разных типов.

Код на C++:1 struct Student {2 string name;3 string lastName;4 int yearOfEntrance;5 }6 struct Student s;7 s.name=’’Иван’’; s.lastName=’’Петров’’;8 s.yearOfEntrance=2009;

s:

name lastName yearOfEntranceИван Петров 2009

6

Page 8: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Файл(Поток) - это последовательность значений опреде-ленного типа, доступ к которой осуществляется последова-тельным способом.

7

Page 9: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Указатель - ячейка, чьё значение указывает на другую ячей-ку, то есть содержит адрес другой ячейки в памяти.

Курсор - ячейка с целочисленным значением, используемаядля указания на ячейку массива.

8

Page 10: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Код на C++:1 struct S1 { int cursor; struct S1 * pointer; }2 struct S2 { double data; int cursor; }

3 1

1.2 33.4 -15.6 17.8 0

0123

9

Page 11: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Абстрактный тип данных (АТД) - математическая модельс совокупностью операторов, определенных в рамках этоймодели.

Например, АТД “Множество” имеет операторы:

• объединение;

• пересечение;

• разность и другие.

10

Page 12: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Реализация АТД на языке программирования подразу-мевает:

• описание АТД с помощью операторов языка программи-рования;

• определение переменных;

• написание процедуры для каждого из операторов АТД.

11

Page 13: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Структурный подход

• данные описываются структурами данных;

• операторы АТД реализуются с помощью функций и про-цедур.

Код на C++:1 //определение структуры данных2 struct IntSet { int elements[100]; }3 //определение оператора объединения4 void union(struct IntSet * s1, struct IntSet * s2);5 //определение оператора пересечения6 void intersect(struct IntSet * s1, struct IntSet * s2);

12

Page 14: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Объектный подход

Данные и операторы объединяются в объект!

13

Page 15: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Объект: некоторая сущность в виртуальном пространстве,обладающая определённым состоянием и поведением, имеетзаданные атрибуты и операций над ними.

14

Page 16: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

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

• данные описываются полями класса;

• операторы АТД реализуются с помощью методов класса.

Экземпляр класса есть объект!

15

Page 17: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Объектный подход

Код на Java:1 class IntSet {2 public int elements[];3 public void union(IntSet s);4 public void intersect(IntSet s);5 }

16

Page 18: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Необходимое нам из ООП

• конструктор;

• интерфейс;

• инкапсуляция;

• шаблон;

17

Page 19: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Конструктор1 class IntSet {2 public int elements[];3 public IntSet(int els[]) {4 elements = els;5 }6 ...7 }8 int a[] = new int[10];9 IntSet set = new IntSet(a);

18

Page 20: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Интерфейс1 interface Set {2 void union(Set s);3 void intersect(Set s);4 }5 class IntSet implements Set {6 public int elements[];7 public IntSet(int els[]) {8 elements = els;9 }10 public void union(Set s) { ... }11 public void intersect(Set s) { ...}12 ...13 }

19

Page 21: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Инкапсуляция1 class IntSet {2 private int elements[];3 private void someFunction() { ... }4 public union(IntSet s) { ... }5 ...6 }

20

Page 22: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Шаблон1 class TemplatedSet<T> {2 private T elements[];3 public IntSet(T els[]) {4 elements = els;5 }6 ...7 }8

9 Integer a[] = new Integer[10];10 TemplatedSet<Integer> set = new TemplatedSet<Integer>(a);

21

Page 23: Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных"

Список литературы

• Ахо А., Хопкрофт Д., Ульман Д. Структуры данных иалгоритмы. - М. : Издательский дом “Вильямс”, 2000.сс.23-28.

• Бьерн Страуструп. Язык программирования С++. Специ-альное издание. - СПб. : Бином, Невский диалект, 2008.

• Java SE Documentation.http://java.sun.com/javase/reference/api.jsp

22