Similar presentations:
Прикладная информатика. (Лекция 1)
1. Лекция 1: Прикладная информатика Введение
12. Разделы информатики
Информатика – наука о способах получения, хранения, обработки, передачи,защиты и использования информации.
Разделы информатики:
Теоретическая информатика - занимается теорией формальных языков и
автоматов, теориями вычислимости
и сложности, теорией графов,
криптологией, логикой и т.п.
Практическая информатика - обеспечивает фундаментальные понятия для
решения стандартных задач.
Техническая информатика
вычислительной техники.
Прикладная информатика - объединяет конкретные применения
информатики в различных областях жизни, науки или производства,
например,
бизнес-информатика,
геоинформатика,
компьютерная
лингвистика и др.
Естественная информатика - изучает процессы обработки информации в
естественной среде.
-
занимается
аппаратной
частью
2
3. Прикладная информатика
Определяетотраслях:
применение
информатики
IT-бизнес;
IT-менеджмент;
IT в образовании;
IT в государственных программах;
IT в естественных науках;
Разработка
средств.
и
использование
в
следящих
инструментальных
3
4. Использование языка C# для решения задач прикладной информатики
45. Литература
http://msdn.microsoft.com/ru-ru/vstudio/default.aspxСпецификация языка C#. Версия 4.0. – 567 с.
Герберт Шилдт С# 4.0: полное руководство. : Пер. с англ. — М. :
ООО "И.Д. Вильямс", 2011. — 1056 с.
Трей Неш C# 2010: ускоренный курс для профессионалов. –
М.:ООО "И.Д. Вильямс". 2010. – 592 с.
ЭндрюТроелсен Язык программирования С# 2010 и платформа
.NET 4.0, 5-е изд. : Пер. с англ. — М. : ООО "И.Д. Вильяме", 2011. –
1392 с.
Фаронов В.В. Программирование на языке C#. – СПб.: Питер,
2007. – 240с.
Карли Уотсон, Кристиан Нейгел, Якоб Хаммер и др. Visual C#
2008: базовый курс. Visual Studio® 2008
5
6. Принципы объектно-ориентированного программирования Массивы
Принципы объектноориентированногопрограммирования
Массивы
6
7. Принципы объектно-ориентированного программирования
Классы и объектыИспользование инкапсуляции
C# и объектно-ориентированное программирование
Разработка объектно-ориентированных систем
7
8. Классы и объекты - Обзор
Что такое класс?Что такое объект?
Сравнение классов со структурами
8
9. Что такое класс?
С точки зрения философа…Автомобиль?
Искусственное понятие, используемое людьми для
классификации
Классификация основывается на общности свойств или
общности в поведении
Согласованность в описании и именовании используемых
классов
Для создания словаря; в общении; когда думаем.
С точки зрения ООП-программиста…
Именованная синтаксическая конструкция, описывающая общие
свойства и общее поведение
Структура данных, содержащая как данные, так и функции
9
10. Синтаксис класса
Синтаксис описания класса:[атрибуты][спецификаторы]class имя[:список_родителей]
{тело_класса}
№
1
Спецификатор
new
Описание
Задает новое описание класса взамен унаследованного от предка.
Используется для вложения классов (в иерархии объектов).
2
3
public
protected
4
5
internal
protected internal
6
private
7
static
8
sealed
9
abstract
Доступ к классу не ограничен
Доступ только из данного или производного класса. Используется
для вложенных классов.
Доступ только из данной программы (сборки).
Доступ только из данного и производного класса и из данной
программы (сборки).
Доступ только из элементов класса, внутри которых описан данный
класс. Используется для вложенных классов.
Статический класс. Позволяет обращатся к методам класса без
создания экземпляра класса
Бесплодный класс. Запрещает наследование данного класса.
Применяется в иерархии объектов.
Абстрактный класс. Применяется в иерархии объектов.
10
11. Состав класса
Класс можно описывать непосредственно внутрипространства имен или внутри другого класса.
В теле класса могут быть объявлены:
константы;
поля;
конструкторы и деструкторы;
методы;
события;
делегаты;
классы (структуры, интерфейсы, перечисления).
11
12. Определение простых классов
Данные и методы вместе внутри классаМетоды public, данные private
class BankAccount
{
public void Withdraw(decimal amount)
{ ... }
public void Deposit(decimal amount)
{ ... }
private decimal balance;
private string name;
}
Public методы
описывают
доступное
поведение
Private поля
описывают
недоступное
состояние
12
13. Что такое объект?
Объект – это экземпляр классаХарактеристики объекта:
Индивидуальность: Объекты должны отличаться
друг от друга
Поведение: объекты могут выполнять задачи
Состояние: Объекты хранят информацию
13
14. Создание новых экземпляров класса
struct Time{
public int hour;
public int minute;
}
class BankAccount
{
...
...
}
При объявление переменной класса объект не создается
Для создания объекта используйте оператор new
class Program
now hour
{
minute
static void Main( )
yours
{
... новый
... BankAccount
Time now;
объект
now.hour = 11;
BankAccount yours = new BankAccount( );
yours.Deposit(999999M);
}
14
}
15. Использование инкапсуляции
Объединение данных и методовКонтроль видимости доступа
Зачем нужна инкапсуляция?
Объектные данные
Использование статических данных
Использование статических методов
15
16. Объединение данных и методов
Объединяйте данные и методы в одной капсулеГраница капсулы определяет внешнее и внутреннее
Синтаксис описания элемента данных:
[атрибуты] [спецификаторы] [const] тип имя [ = начальное_значение ]
Withdraw( )
Withdraw( )
balance
balance
Deposit( )
Deposit( )
BankAccount
BankAccount
16
17. Контроль видимости доступа
Методы определяются как public и доступны извнеДанные определяются как private и доступны только
изнутри
Withdraw( )
Withdraw( )
balance
balance
Deposit( )
Deposit( )
BankAccount
BankAccount
17
18. Зачем нужна инкапсуляция?
Можно контролироватьОбъект используется
только через
public-методы
Можно изменять
На использование
объекта не влияют
возможные изменения
типов скрытых данных
Withdraw( )
Deposit( )
balance 12.56
Withdraw( )
Deposit( )
dollars 12
cents
56
18
19. Объектные данные
Объектные данные содержат индивидуальнуюинформацию об объекте
Например, каждый банковский счет содержит свой
баланс.Если два банковских счета имеют
одинаковый баланс, то это всего лишь совпадение
Withdraw( )
Withdraw( )
Deposit( )
Deposit( )
balance 12.56
balance
owner
owner
"Bert"
12.56
"Fred"
19
20. Использование статических данных
Статические данные содержат информацию обо всехобъектах класса
Например, предположим, что все счета имеет
одинаковую процентную ставку. Хранение этого
значения в каждом счете нецелесообразно. Почему?
Withdraw( )
Withdraw( )
Deposit( )
Deposit( )
balance 12.56
balance
99.12
interest 7%
interest 7%
20
21. Использование статических методов
Статические методы имеют доступ только кстатическим данным
Статический метод применяется на уровне класса, а
не объекта
Класс account
InterestRate( )
interest 7%
Классы содержат статические
данные и статические методы
Объект account
Withdraw( )
Deposit( )
balance
owner
99.12
"Fred"
Объекты содержат объектные
данные и объектные методы
21
22. Hello, World
using System;class Hello
{
public static int Main( )
{
Console.WriteLine("Hello, World");
return 0;
}
}
22
23. Создание вложенных классов
Классы можно вкладывать в другие классыclass Program
{
static void Main( )
{
Bank.Account yours = new Bank.Account( );
}
}
class Bank
{
... class Account { ... }
Полное имя вложенного
класса включает в себя
}
имя внешнего класса
23
24. Доступ к вложенным классам
Вложенные классы также могут объявляться какpublic или private
class Bank
{
public class Account { ... }
private class AccountNumberGenerator { ... }
}
class Program
{
static void Main( )
{
Bank.Account
accessible;
Bank.AccountNumberGenerator inaccessible;
}
}
24
25. Массивы
2526.
Обзор массивовОбзор массивов
Форма записи массива в C#
Ранг массива
Создание экземпляров массивов
Инициализация массивов
Организация доступа к элементам массива
Инициализация многомерных массивов
Проверка границ массива
Сравнение массивов и коллекций
Использование массивов
26
27. Что такое массив?
Массив –это последовательный набор элементовВсе элементы массива одного типа
Структуры могут хранить элементы разных типов
Доступ к конкретным элементам массива происходит
через использование индекса
Integer index 0
(zero)
Integer index 4
(four)
27
28. Форма записи массива в C#
При объявлении массива необходимо определитьследующее:
Тип элементов массива
Ранг массива
Имя массива
type[ ] name;
int [] arr;
Определяет имя массива
Определяет ранг массива
Определяет тип элементов массива
28
29. Ранг массива
Вместо слова ранг иногда говорят размерностьКоличество индексов, определяющих каждый из
элементов
long[ ] row;
Ранг 1: Одномерныйl
Один индекс для определения
каждого элемента типа long
int[,] grid;
Ранг 2: Двумерный
Два индекса для определения
каждого элемента типа int
29
30. Создание экземпляров массивов
Объявление массива не приводит к созданию массиваДля создания массива необходимо использовать слово
new
Все элементы массива имеют значение по умолчанию,
равное нулю
row
long[ ] row = new long[4];
0 0 0 0
Variable
int[,] grid = new int[2,3];
grid
Instance
0 0 0
0 0 0
30
31. Инициализация массивов
Можно явным образом инициализировать массивыМожно использовать удобную краткую запись
long[ ] row = new long[4] {0, 1, 2, 3};
long[ ] row = {0, 1, 2, 3};
Равносильно
0 1 2 3
row
31
32. Использование при инициализации массива операции new
Данная форма инициализации массива можетоказаться полезной в случае, когда уже
существующей ссылке на массив присваивается
ссылка на новый массив.
static void Main()
{
int[] myArray = { 0, 1, 2, 3, 4, 5};
int i;
for (i = 0; i < 6; i++)
Console.Write(" "+myArray[i]);
Console.WriteLine("\nНовый массив: ");
myArray = new int[] { 9, 1, 10, 8, 7, 3, 16, 5, 87, 4 };
for (i = 0; i < 10; i++)
Console.Write(" " + myArray[i]);
}
32
33. Инициализация многомерных массивов
Можно инициализировать и многомерные массивыНеобходимо определить все элементы
int[,] grid = {
{5, 4, 3},
{2, 1, 0}
};
int[,] grid = {
{5, 4, 3},
{2, 1
}
};
Неявно new int[2,3] массив
grid
5 4 3
2 1 0
33
34. Организация доступа к элементам массива
Определяйте индекс для каждой из размерностейИндекс первого элемента равен нулю
long[ ] row;
...
row[3];
int[,] grid;
...
grid[1,2];
2
3
1
34
35. Проверка на отсутствие нарушения границ массива
При попытке доступа к элементу массива производитсяпроверка на отсутствие нарушения границ
При использовании несуществующего индекса
выбрасывается исключение IndexOutOfRangeException
Используйте свойство Length и метод GetLength
row
grid
grid.GetLength(0)==2
row.GetLength(0)==6
row.Length==6
grid.GetLength(1)==4
grid.Length==2*4
35
36. Выход за границы массива
Выход за границы массива в C# расценивается какошибка, в ответ на которую генерируется
исключение - IndexOutOfRangeException
static void Main()
{
int[] myArr = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i;
try
{
for (i = 0; i <= 10; i++)
Console.WriteLine(myArr[i]);
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("Exception: Выход за границу");
}
}
36
37. Сравнение массивов и коллекций
Если массив переполнится, его размер нельзяизменить
Массивы используются для хранения
однотипных данных
Класс коллекции, например ArrayList, может
менять размеры
Коллекции могут хранить данные разных типов
Коллекция может быть открыта только для
чтения
Массивы быстрее, но менее гибкие
Коллекции немного медленнее, но более гибкие
37
38. Создание массивов вычисляемого размера
Размер массива не обязан быть константой,определяемой на этапе компиляции
Это может быть любое целочисленное выражение
Доступ к элементам будет таким же быстрым
Размер массива, определяемый целочисленной
константой на этапе компиляции:
long[ ] row = new long[4];
Размер массива, определяемый целочисленным
выражением на этапе выполнения:
string s = Console.ReadLine();
int size = int.Parse(s);
long[ ] row = new long[size];
38
39. Копирование переменных массива
При копировании переменной массива копируетсятолько переменная массива
Не создается копия экземпляра массива
Две переменные массива могут ссылаться на один и
тот же экземпляр массива
long[ ] row = new long[4];
0 0 0 0
long[ ] copy = row;
row
...
row[0]++;
copy
long value = copy[0];
Console.WriteLine(value);
Переменная
Экземпляр
39
40. Использование массивов
Свойства массиваМетоды массива
Возвращение массивов из методов
Передача массивов в качестве параметров
Аргументы командной строки
Использование массивов с циклом foreach
40
41. Свойства массивов
long[ ] row = new long[4];0 0 0 0
row.Rank
1
row.Length
4
row
int[,] grid = new int[2,3];
grid
0 0 0
0 0 0
grid.Rank
2
grid.Length
6
41
42. Класс Array - Методы обработки массивов
Часто используемые методыSort – сортирует элементы одномерного массива
Clear – устанавливает для указанного диапазона
элементов значения 0, false или null
Copy – создает копию массива
IndexOf – возвращает индекс впервые встречаемого
значения
42
43. Передача и возвращение массивов в качестве параметров
class Example2 {static void Main( ) {
int[ ] arg = {10, 9, 8, 7};
Method(arg);
System.Console.WriteLine(arg[0]);
}
//передача массивов
static void Method(int[ ] parameter) {
parameter[0]++;
}
//возвращение массивов
static int[ ] CreateArray(int size) {
int[ ] created = new int[size];
return created;
}
}
43
44. Аргументы командной строки
В процессе выполнения аргументы команднойстроки передаются в Main
Main может принимать в качестве параметра массив
из строк
Имя программы не является членом массива
class Example3 {
static void Main(string[ ] args) {
for (int i = 0; i < args.Length; i++) {
System.Console.WriteLine(args[i]);
}
}
}
44
45. Использование массивов с циклом foreach
Цикл foreach позволяет скрыть подробностиперебора элементов массива
Синтаксис:
foreach (<тип> <имя> in <группа>)
{<тело цикла>}
class Example {
static void Main(string[ ] args) {
foreach (string arg in args)
{
System.Console.WriteLine(arg);
}
}
}
45
46. Массивы массивов
Jagged arrays - изрезанные (ступенчатые)одномерный массив, элементы которого являются
массивами, элементы которых, в свою очередь,
снова могут быть массивами, и так может
продолжаться до некоторого уровня вложенности.
Объявление ступенчатого массива:
тип [][] имя_массива;
46
47. Созданием массивов с инициализацией
Требуется вызывать конструктор для каждогомассива на самом нижнем уровне
int[][] jagger = new int[3][]
{
new int[] {5,7,9,11},
new int[] {2,8},
new int[] {6,12,4}
};
или
int[][] jagger1 = new int[3][]
{
new int[4],
new int[2],
new int[3]
};
47
48. Организация ввода-вывода
С#-программы выполняют операции ввода-выводапосредством потоков, которые построены на
иерархии классов.
Поток (stream) - это абстракция, которая генерирует
и принимает данные.
Потоки:
байтовые,
символьные,
двоичные
48
49. Понятие о потоках
Класс Stream пространства имен System.IO представляет байтовый поток и является базовымдля всех остальных потоковых классов.
Из класса Stream выведены байтовые классы
потоков:
FileStream - байтовый поток, разработанный для
файлового ввода-вывода,
BufferedStream - заключает в оболочку байтовый
поток и добавляет буферизацию;
MemoryStream - байтовый поток, который использует
память для хранения данных.
49
50. Байтовый поток
Конструктор, который открывает поток для чтенияи/или записи:
FileStream(string filename, FileMode mode)
Версия конструктора позволяет ограничить доступ
только чтением или только записью:
FileStream(string filename, FileMode mode,
FileAccess how)
50
51. Байтовый поток. Пример
FileStream fileIn = new FileStream("text.txt",FileMode.Open,
FileAccess.Read);
FileStream fileOut = new FileStream("newText.txt",
FileMode.Create,
FileAccess.Write);
int i;
while ((i = fileIn.ReadByte())!=-1)
{
fileOut.WriteByte((byte)i);
}
fileIn.Close();
fileOut.Close();
51
52. Символьный поток
StreamReader – содержит свойства и методы,обеспечивающие считывание символов из
байтового потока
StreamReader fileIn = new StreamReader(new FileStream("text.txt"
FileMode.Open, FileAccess.Read));
StreamWriter – содержит свойства и методы,
обеспечивающие запись символов в байтовый
поток
StreamWriter fileOut=new StreamWriter(new FileStream("text.txt",
FileMode.Create, FileAccess.Write));
StreamWriter(string name, bool appendFlag);
52
53. Символьный поток. Пример
StreamReader fileIn = new StreamReader("text.txt",Encoding.GetEncoding(1251));
StreamWriter fileOut=new StreamWriter("newText.txt", false);
string line;
while ((line=fileIn.ReadLine())!=null) //пока поток не пуст
{
fileOut.WriteLine(line);
}
fileIn.Close();
fileOut.Close();
53
54. Двоичный поток
Формирование двоичного файла:static
void Main()
{
//открываем двоичный поток
BinaryWriter fOut=
new BinaryWriter(new FileStream("t.dat",
FileMode.Create));
//записываем данные в двоичный поток
for (int i=0; i<=100; i+=2)
{
fOut.Write(i);
}
fOut.Close(); //закрываем двоичный поток
}
54
55. Двоичный поток
Просмотр двоичного файла:static void Main()
{
FileStream f=new FileStream("t.dat",FileMode.Open);
BinaryReader fIn=new BinaryReader(f);
long n=f.Length/4;
//определяем количество чисел в двоичном потоке
int a;
for (int i=0; i<n; i++)
{
a=fIn.ReadInt32();
Console.Write(a+" ");
}
fIn.Close();
f.Close();
}
55