'

Введение в объектно-ориентированное программирование. Основные элементы языка С#. Понятие класса.

Понравилась презентация – покажи это...





Слайд 0

Введение в объектно-ориентированное программирование. Основные элементы языка С#. Понятие класса. Лекция №1


Слайд 1

2 Основной учебник: Павловская Т.А. С#. Программирование на языке высокого уровня. Учебник для вузов. – СПб.: Питер, 2007.


Слайд 2

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


Слайд 3

4 Класс — это специальный тип данных, включающий описание данных и описание процедур и функций (методов), которые могут быть выполнены над представителем класса — объектом. Объект – это конкретный экземпляр класса. Основные принципы ООП: Наследование Инкапсуляция Полиморфизм


Слайд 4

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


Слайд 5

6 Инкапсуляция. Под инкапсуляцией понимается скрытие полей объекта с целью обеспечения доступа к ним только посредством методов класса. Объект используется через интерфейс – совокупность правил доступа. Полиморфизм. Полиморфизм — это возможность использовать одинаковые имена для методов, входящих в различные классы.


Слайд 6

7 Язык С# является одним из компонентов платформы .NET Платформа .NET включает в себя языки программирования VB.NET, J#.NET, C++.NET и др. среду разработки приложений Visual Studio.NET для нескольких языков программирования компиляторы, переводящие программу с соответствующего языка в промежуточный язык Microsoft Intermediate Language общеязыковая среда выполнения Common Language Runtime (CLR) или виртуальная машина CLI Библиотека классов


Слайд 7

8 Все классы библиотеки .NET, а также создаваемые программистом в среде .NET классы имеют одного предка – класс object. Все классы сгруппированы в пространства имен. Любая создаваемая в .NET программа использует пространство имен System, в котором определены классы, обеспечивающие базовую функциональность.


Слайд 8

9 2 Основные элементы языка C# Идентификатор – имя любого объекта программы (переменной, константы, процедуры и др.). Идентификатор может включать буквы, цифры и символ подчеркивания. Идентификатор не может начинаться с цифры. Прописные и строчные буквы в идентификаторах различаются. Т.е. напр., Vasja1, VASJA1 и VaSjA1 – это разные идентификаторы Длина идентификатора не ограничена.


Слайд 9

10 Для использования ключевого слова в качестве идентификатора его нужно предварить символом @. Например, @if В С# для имен используют обычно две нотации: Паскаля и Camel. Нотация – соглашение о правилах создания имен. В нотации Паскаля каждое слово в имени начинается с прописной буквы: MaxDlina В нотации Camel каждое слово в имени кроме первого начинается с прописной буквы: maxDlina, myBestFriend


Слайд 10

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


Слайд 11

12 Встроенные типы С# однозначно соответствуют стандартным классам библиотеки .NET , определенным в пространстве имен System.


Слайд 12

13


Слайд 13

14 Имя встроенного типа можно заменить именем соответствующего класса библиотеки. Т.е. у встроенных типов данных есть методы и поля, к которым можно обращаться. Например: int.MaxValue (System.Int32.MaxValue) – максимальное значение типа int.


Слайд 14

15 Константы (литералы)


Слайд 15

16


Слайд 16

17 Переменные Все переменные, используемые в программе должны быть описаны явным способом. При описании задаются ее имя и тип: тип имя1,[имя2, имя3, …]; Например, int dlina; float b; При описании можно инициализировать переменные: int x = 1, b; float y = 0.1f, n = y * 2 + 2.1;


Слайд 17

18 При описании инициализировать переменные не обязательно, но обязательно их инициализировать перед вычислениями. Область действия переменной начинается в точке ее описания и распространяется до конца блока, внутри которого она описана. Блок – это код, заключенный в фигурные скобки. Имя переменной должно быть уникальным в области ее действия.


Слайд 18

19 Операции Ниже приводятся операции в порядке убывания приоритета.


Слайд 19

20


Слайд 20

21 Если операнды, входящие в выражение, одного типа и операция для этого типа определена, то результат выражения будет иметь тот же тип. Если операнды разного типа или операция для этого типа не определена, перед вычислениями автоматически выполняется преобразование типа по правилам неявного преобразования:


Слайд 21

22 double float decimal long ulong int uint short ushort sbyte byte char


Слайд 22

23 Преобразование выполняется непосредственно из исходного типа в результирующий. Если неявного преобразования из одного типа в другой не существует, можно задать явное преобразование с помощью операции (тип)x. За результатом должен следить программист. Например: long y = 500; int x = (int) y; byte z = (byte) x; В последнем случае данные будут потеряны.


Слайд 23

24 3 Классы: основные понятия Класс — это специальный тип данных, включающий описание данных и описание функций (методов), которые могут быть выполнены над представителем класса — объектом. Данные и функции, описанные в классе, являются его элементами. Класс описывается следующим образом: [ атрибуты] [ спецификаторы] class имя_класса [ : предки] { тело класса }


Слайд 24

25 Спецификаторы определяют свойства класса и доступность для других элементов программы. public доступ не ограничен protected для вложенных классов доступ только из элементов данного и производных классов internal доступ только из данной программы private для вложенных классов доступ только из элементов класса, внутри которого описан данный класс. Для не вложенных классов используются только спецификаторы public и internal. По умолчанию принят спецификатор internal.


Слайд 25

26 Элементы класса : Константы хранят неизменяемые значения, связанные с классом Поля содержат данные класса Методы реализуют действия, выполняемые классом или экземпляром Свойства определяют характеристики класса в совокупности со способами их задания и получения ( методами записи и чтения) Конструкторы выполняют действия по инициализации экземпляров или класса в целом


Слайд 26

27 Деструкторы определяют действия, выполняемые перед тем как объект будет уничтожен Индексаторы обеспечивают возможность доступа к элементам класса по их порядковому номеру Операции задают действия с объектами с помощью знаков операций События, на которые может реагировать объект, определяют уведомления, которые может генерировать класс Типы – внутренние по отношению к классу типы данных


Слайд 27

28 Объекты класса создаются явным или неявным образом (программистом или системой). Для явного создания экземпляра используется операция new. Например, пусть имеется следующее описание класса: class Primer1{} Тогда для создания объектов p1 и p2 в программе следует набрать Primer1 p1 = new Primer1(); Primer1 p2 = new Primer1(); Формат операции: new тип ( [ аргументы ])


Слайд 28

29 Программа на С# состоит из взаимодействующих между собой классов. При создании консольного приложения средой автоматически создается следующая заготовка: using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { } } }


Слайд 29

30 Директива using System; разрешает использовать имена классов из пространства имен System без указания имени пространства. Ключевое слово namespace создает для проекта собственное пространство имен. Таким образом, программным объектам можно давать имена, не волнуясь о том, что они могут совпасть с именами в других пространствах имен. Пока программа содержит только один класс Program, содержащий только один элемент - метод Main. В каждом приложении обязательно должен присутствовать метод Main. Именно с него начинается выполнение программы.


Слайд 30

31 Простейший ввод-вывод Для работы с консолью в С# применяется класс Console, определенный в пространстве имен System. В классе Console существует несколько вариантов методов с именами Write и WriteLine, предназначенных для вывода значений различных типов. Методы с одинаковыми именами, но с разными параметрами называются перегруженными. Методы вывода перегружены для всех встроенных типов данных. Для доступа к методу используется операция доступа (точка): Console.WriteLine(параметр);


Слайд 31

32 Например: Console.WriteLine("Здравствуйте, я ваша тетя!"); или Console.Write ("Здравствуйте, я ваша тетя!"); Если метод WriteLine (Write) вызван с одним параметром, он может быть любого встроенного типа. Если требуется вывести в одной строке несколько величин различного типа, перед передачей для вывода их нужно «склеить» в одну строку с помощью операции +. Перед объединением строки с числом нужно преобразовать число в строку с помощью метода ToString().


Слайд 32

33 Например: int x = 3; Console.WriteLine("x="+x.ToString()); В случае форматного вывода используется другой вариант метода с несколькими параметрами. Первым параметром передается строковая константа, содержащая обычные символы, которые выводятся на экран, а также управляющие последовательности и параметры в фигурных скобках. Эти параметры представляют собой номера переменных в списке вывода и при выводе заменяются на значения соответствующих переменных (Нумерация с нуля).


Слайд 33

34 Например: int x = 3; float y=0.6f; Console.WriteLine("x={0}\ty={1}",x,y ); Console.WriteLine("x="+x.ToString()+" y="+y.ToString()); Для каждого параметра можно задать ширину поля вывода. Например: Console.WriteLine("x={0,5}\ty={1,4}",x,y );


Слайд 34

35 В классе Console для ввода строки можно использовать метод ReadLine(). Например, Console.Write("Как вас зовут?\n"); string name = Console.ReadLine(); Console.Write("Введите символ\n"); char name = (char) Console.Read(); Для ввода символа можно использовать метод Read(), который возвращает код символа типа int или -1, если символ не был введен. Поэтому требуется явное преобразование в тип char.


Слайд 35

36 Ввод чисел с клавиатуры можно осуществить в два этапа: ввести число в виде строки символов преобразовать строку в переменную соответствующего типа. Преобразование выполняется с помощью класса Convert из пространства имен System, используя соответствующие методы класса ToInt32(s), ToDouble(s), ToByte(s) и т.д. Здесь s – параметр типа string. Например: string s; s = Console.ReadLine(); byte h = Convert.ToByte(s);


Слайд 36

37 Преобразование можно также выполнить с помощью метода Parse, который есть в каждом стандартном арифметическом классе. Например: byte w = byte.Parse(s); Функции класса Math В классе Math пространства имен System реализованы всевозможные математические функции.


Слайд 37

38 Abs(x) перегружен Arccos x Acos(x) Arcsin x Asin(x) Arсtan x Atan(x) округление до большего целого Ceiling(x) Натуральный логарифм Log(x) Десятичный логарифм Log10(x) число е Е число ? PI


Слайд 38

39 Округление Round(x) перегружен Exp(x) tg x Tan(x) Pow(x,y) Sqrt(x) Остаток от деления IEEERemainder(x,y) Округление до меньшего целого Floor(x) Знак числа Sign(x) тип результата int, аргументы перегружены


Слайд 39

40 Пример. Вычислить значение выражения using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1


Слайд 40

41 { class Program { static void Main(string[] args) { float x,z; string s; Console.WriteLine("Введите x"); s = Console.ReadLine(); x = Convert.ToSingle(s); Console.WriteLine("Введите z"); s = Console.ReadLine(); z = Convert.ToSingle(s);


Слайд 41

42 double b = x * (Math.Atan(z) - Math.Exp(-(x + 3))); Console.WriteLine("x="+x.ToString() + " z=" + z.ToString()); Console.WriteLine("z=" + z.ToString()); Console.ReadKey(); } } }


Слайд 42

43 Основные элементы классов: данные, методы, конструкторы. Лекция №2


Слайд 43

44 Данные: поля и константы Переменные, описанные в классе, называются полями класса. Синтаксис описания элемента данных: [ атрибуты ] [ спецификаторы ] [ const ] тип имя [ = начальное_значение]; Спецификаторы полей и констант: public доступ к элементу не ограничен protected доступ только из данного и производных классов internal доступ только из данной сборки private доступ только из данного класса static одно поле для всех экземпляров класса


Слайд 44

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


Слайд 45

46 Обращение к статическому полю класса: имя класса. имя поля Обращение к константе класса: имя класса. имя константы Обращение к обычному полю ( полю экземпляра) класса: имя экземпляра. имя поля


Слайд 46

47 Например, пусть в приложении описан класс Primer1: class Primer1 { public float x, y = 2.5f; //поля данных с неограниченным доступом public const int f = 1, z = 5; // константы public static char h = 'A', h1; //статические поля данных double b; // закрытое поле данных } Обратиться к полям этого класса можно следующим образом:


Слайд 47

48 class Program { static void Main(string[] args) { Primer1 P1 = new Primer1(); Primer1 P2 = new Primer1(); Console.WriteLine(P1.x); Console.WriteLine(P1.y); Console.WriteLine(P2.x); Console.WriteLine(P2.y); Console.WriteLine(Primer1.f); Console.WriteLine(Primer1.z); Console.WriteLine(Primer1.h); Сonsole.WriteLine(Primer1.h1); } }


Слайд 48

49 Оператор Console.WriteLine(P1.b); будет ошибочным, т.к. обращаться к закрытому полю данных из другого класса нельзя. Доступ к такому полю можно получить только посредством метода. Результат выполнения программы: 0 2,5 0 2,5 1 5 А пустая строка


Слайд 49

50 Все поля автоматически инициализируются (статические – при инициализации классов, обычные – при создании объектов). Числовые получают значение 0, символьные и строковые – пустая строка. После этого полям присваиваются значения, указанные при явной инициализации (если таковая имеется).


Слайд 50

51 Методы Метод –это оформленный особым образом поименованный фрагмент кода, который реализует вычисления или другие действия, выполняемые классом или объектом. Метод описывается один раз, а вызываться может необходимое количество раз. Синтаксис метода: [ атрибуты ] [ спецификаторы ] тип имя ([параметры]) { тело метода } заголовок метода последовательность операторов


Слайд 51

52 Спецификаторы метода: public доступ не ограничен protected доступ только из данного и производных классов internal доступ только из данной сборки private доступ только из данного класса (по умолчанию) static одно поле для всех экземпляров класса Для работы со статическими данными класса используются статические методы (static), для работы с данными экземпляра – методы экземпляра (просто методы). Статические методы можно вызвать, не создавая объект. Чаще всего применяется спецификатор доступа к методам public.


Слайд 52

53 Тип в заголовке метода определяет тип результата работы метода. Для передачи значения выражения в качестве результата работы метода используется оператор return выражение; Например: class Primer2 { string s; public string vvods() { s = Console.ReadLine(); return s; }


Слайд 53

54 Если метод не возвращает никакого значения, в заголовке указывается тип void, а оператор return отсутствует. Например: public void vyvods() { Console.WriteLine(s); } Параметры в заголовке используются для обмена информацией с методом и определяют множество значений аргументов, которые можно передавать в метод. Для каждого параметра указывается тип.


Слайд 54

55 Обращение к статическому методу класса: имя класса. имя метода([аргументы]) Например: static int maximum(int x, int y) { if (x > y) return x; else return y; }


Слайд 55

56 Обращение к нестатическому методу класса: имя объекта. имя метода([аргументы]) Если метод возвращает значение, то он вызывается отдельным оператором, а если не возвращает, то в составе выражения в правой части оператора присваивания. Например: Primer2 S1 = new Primer2(); string g = S1.vvods(); S1.vyvods(); Console.ReadKey(); При вызове метода из другого метода того же класса имя класса или экземпляра можно не указывать.


Слайд 56

57 При вызове метода с параметрами количество аргументов должно совпадать с количеством параметров в заголовке метода. Кроме того должно существовать неявное преобразование типа аргумента к типу соответствующего параметра. Например, если метод maximum является методом класса Primer2, то из метода Main можно обратиться к нему след. образом: int max = Primer2.maximum(5, 8); или int max = Primer2.maximum(c1, c2+6);


Слайд 57

58 Eсли метод maximum является методом класса Program, то из метода Main можно обратиться к нему след. образом: int max = maximum(5, 8); В С# предусмотрены след. виды параметров: параметры-значения параметры-ссылки выходные параметры параметры-массивы


Слайд 58

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


Слайд 59

60 Если в методе требуется изменить значение передаваемых в качестве параметров величин, используют параметры-ссылки. При описании параметра-ссылки в заголовке метода перед указанием типа помещают ключевое слово ref При вызове метода в область параметров копируется не значение аргумента, а его адрес, т.е. метод работает непосредственно с переменной из вызывающей функции и может ее изменить. При вызове метода в качестве аргумента на месте параметра-ссылки может находиться только ссылка на инициализированную переменную точно того же типа со словом ref перед аргументом.


Слайд 60

61 Например: class Program { static void Udvoenie(ref int x, ref float y) { x = 2 * x; y *= 2; } static void Main(string[] args) { int a = 3; float b = 3.5f; Udvoenie(ref a, ref b); Console.WriteLine("a=" + a.ToString() + " b=" + b.ToString()); } }


Слайд 61

62 Если нет необходимости инициализировать переменную-аргумент до вызова метода, можно использовать выходные параметры. При описании выходного параметра в заголовке метода перед указанием типа помещают ключевое слово out. Выходному параметру обязательно должно быть присвоено значение внутри метода, а в вызывающем коде переменную достаточно описать. При вызове метода перед соответствующим аргументом тоже указывается слово out.


Слайд 62

63 class Program { static void Vvod(out int x, out float y) { string s; Console.WriteLine("Введите целое число"); s = Console.ReadLine(); x = Convert.ToInt32(s); Console.WriteLine("Введите вещественное число"); s = Console.ReadLine(); y = Convert.ToSingle(s); }


Слайд 63

64 static void Main(string[] args) { int a; float b; Vvod(out a, out b); Console.WriteLine("a=" + a.ToString() + " b=" + b.ToString()); Console.ReadKey(); } }


Слайд 64

65 В любой нестатический метод автоматически передается скрытый параметр this, в котором хранится ссылка на вызвавший этот метод объект. Этот параметр применяется, например, когда требуется использовать имя поля, совпадающее с именем параметра метода:


Слайд 65

66 class Primer3 { int x; double y; public void set_x(int x) { this.x = x; } public void set_y(double y) { this.y = y; } public double sum() { return x + y; } }


Слайд 66

67 class Program { static void Main(string[] args) { Primer3 P1 = new Primer3(); Primer3 P2 = new Primer3(); int a = 3; float b=4.5f; P1.set_x(a); P1.set_y(b); a = 5; b=5.3f; P2.set_x(a); P2.set_y(b); Console.WriteLine("сумма1=" + P1.sum().ToString() ); Console.WriteLine("сумма2=" + P2.sum().ToString()); Console.ReadKey(); } }


Слайд 67

68 P1 P2 P1.x P1.y P2.x P2.y При выполнении оператора P1.set_x(a); выполнение this.x = x; это фактически x=a и P1.x = x 3 При выполнении оператора P2.set_y(b); выполнение this.y = y; это фактически y=b и P2.y = y 5.3 x y set_x set_y


Слайд 68

69 Конструкторы Конструктор экземпляра – это метод, предназначенный для инициализации объекта, автоматически вызываемый при создании объекта с помощью операции new. Имя конструктора должно совпадать с именем класса. [спецификатор] имя класса([параметры]) { тело конструктора} Конструктор не возвращает значение. Класс может иметь несколько конструкторов для инициализации объектов разными способами. Обычно используется спецификатор public.


Слайд 69

70 Если конструктор в классе не определен, C# автоматически предоставляет конструктор по умолчанию, который инициализирует все поля нулями. Но если в классе определить хотя бы один конструктор, конструктор по умолчанию не используется. Для инициализации статических данных класса можно создать статический конструктор. Статический конструктор вызывается автоматически до вызова конструктора объекта. Он должен быть закрытым. static имя класса() { тело конструктора}


Слайд 70

71


Слайд 71

72


Слайд 72

73


Слайд 73

74


Слайд 74

75


Слайд 75

76


Слайд 76

77


Слайд 77

78


×

HTML:





Ссылка: