Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обработки данных" - Presentation Transcript
Хакасский государственный университет им. Н.Ф. Катанова
Структуры и алгоритмы обработки данных
Лекция: Абстрактные типы данных
Николай Гребенщиков, www.grebenshikov.ru
Основные понятния
• Тип данных
• Структура данных
• Абстрактный тип данных
• Класс
1
Тип данных переменной - множество значений, которые
может принимать эта переменная.
Java-код:
1 int a = 5;
2 double b = 0.5;
3 string c = ‘‘abc’’;
4 boolean d = true;
2
Структура данных - набор переменных, возможно, различ-
ных типов данных, объединенных определенным образом.
Структура данных создается путем задания имени совокуп-
ности (или агрегату) ячеек.
Ячейка является базовым блоком структуры данных, кото-
рая предназначена для хранения значения определенного ба-
зового или составного типа.
3
Фундаментальные структуры данных
• Массив
• Запись
• Файл
4
Массив - последовательность ячеек определенного типа.
Код на Java:
1 int a[] = new int[5];
2 boolean d[] = new boolean[5];
d:
1 2 3 4 5
true false true true false
d[3] = false
5
Запись - это ячейка, состоящая из нескольких ячеек (по-
лей), значение которых могут быть разных типов.
Код на 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
Файл(Поток) - это последовательность значений опреде-
ленного типа, доступ к которой осуществляется последова-
тельным способом.
7
Указатель - ячейка, чьё значение указывает на другую ячей-
ку, то есть содержит адрес другой ячейки в памяти.
Курсор - ячейка с целочисленным значением, используемая
для указания на ячейку массива.
8
Код на C++:
1 struct S1 { int cursor; struct S1 * pointer; }
2 struct S2 { double data; int cursor; }
3 1
0 1.2 3
1 3.4 -1
2 5.6 1
3 7.8 0
9
Абстрактный тип данных (АТД) - математическая модель
с совокупностью операторов, определенных в рамках этой
модели.
Например, АТД “Множество” имеет операторы:
• объединение;
• пересечение;
• разность и другие.
10
Реализация АТД на языке программирования подразу-
мевает:
• описание АТД с помощью операторов языка программи-
рования;
• определение переменных;
• написание процедуры для каждого из операторов АТД.
11
Структурный подход
• данные описываются структурами данных;
• операторы АТД реализуются с помощью функций и про-
цедур.
Код на 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
Объектный подход
Данные и операторы объединяются в объект!
13
Объект: некоторая сущность в виртуальном пространстве,
обладающая определённым состоянием и поведением, имеет
заданные атрибуты и операций над ними.
14
Класс определяет скрытую внутреннюю структуру некото-
рого значения, а также набор операций, применимых к дан-
ному значению.
• данные описываются полями класса;
• операторы АТД реализуются с помощью методов класса.
Экземпляр класса есть объект!
15
Объектный подход
Код на Java:
1 class IntSet {
2 public int elements[];
3 public void union(IntSet s);
4 public void intersect(IntSet s);
5 }
16
Необходимое нам из ООП
• конструктор;
• интерфейс;
• инкапсуляция;
• шаблон;
17
Конструктор
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
Интерфейс
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
Инкапсуляция
1 class IntSet {
2 private int elements[];
3 private void someFunction() { ... }
4 public union(IntSet s) { ... }
5 ...
6 }
20
Шаблон
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
Список литературы
• Ахо А., Хопкрофт Д., Ульман Д. Структуры данных и
алгоритмы. - М. : Издательский дом “Вильямс”, 2000.
сс.23-28.
• Бьерн Страуструп. Язык программирования С++. Специ-
альное издание. - СПб. : Бином, Невский диалект, 2008.
• Java SE Documentation.
http://java.sun.com/javase/reference/api.jsp
22
0 comments
Post a comment