ExpC_Module 6ru_1.ppt
- Количество слайдов: 33
Модуль 6 Классы и методы
Обзор модуля В этом модуле вы изучите n Классы и объекты n Методы n Модификаторы доступа n Перегрузку методов n Конструкторы и деструкторы Изучаем C#/ Модуль 6/ 2 из 33
Занятие 1 - Классы и объекты На первом занятии, Классы и объекты, вы изучите: n Объяснение объектно-ориентированного программирования. n Описание объектов. n Объяснение, как создавать классы. n Объяснение, как создавать экземпляры объектов. Изучаем C#/ Модуль 6/ 3 из 33
Объектно-ориентированное программирование n n n Языки программирования всегда разрабатывались на основе двух фундаментальных принципов - данных и способов манипулирования данными. Такие традиционные языки, как Pascal и C, используют процедурный продход, сфокусированный больше на способах манипулирования данными, нежели на самих данных. Этот подход имеет такие недостатки, как недостаточное повторное использование и недостаточное удобство эксплуатации. Изучаем C#/ Модуль 6/ 4 из 33
Особенности n n n Абстрагирование - Свойство выделения только Объектно-ориентированное программирование требуемой информации из объектов. обеспечивает ряд особенностей, отличающих его от традиционного подхода к программированию. Инкапсуляция - Только указанная информация может быть сделана доступной, иная - скрытой. Преимущества: n Абстрагирование Наследование - Процесс создания нового класса n Инкапсуляция на основе атрибутов и методов существующего класса. n Наследование n Полиморфизм - Свойство различного поведения в различных ситуациях. Изучаем C#/ Модуль 6/ 5 из 33
Объекты n n Объект - это материальная сущность, например, машина, стол или портфель. Каждая сущность имеет некоторые характеристики и способна совершать некоторые действия Понятие объекта в реальном мире можно расширить на мир программирования. Экземпляр объекта отличает его от других объектов того же типа. Изучаем C#/ Модуль 6/ 6 из 33
Классы n Несколько объектов, имеющих схожее состояние и поведение, могут быть сгруппированы в один класс Изучаем C#/ Модуль 6/ 7 из 33
Создание классов n Принцип классов в реальном мире можно расширить на мир программирования, class <Class. Name> аналогично принципу объектов. { Синтаксис // элементы класса } n n Класс - это шаблон или образец, определяющий состояние и поведение имя класса. Class. Name: определяет всех объектов, принадлежащих к этому классу. где, Класс содержит поля и методы, называемые вместе элементами данных класса. Изучаем C#/ Модуль 6/ 8 из 33
Рекомендации n n Есть несколько соглашений для имен классов при их создании. Имя класса: Должно быть существительным. Не может быть в смешанном регистре, и первая буква каждого слова в имени должна быть прописной. Должно быть простым, описательным и значащим Не может быть ключевым словом C#. Не может начинаться с цифры. Могут начинаться с символа ‘@’ или знака подчеркивания (_), хотя это и не рекомендуется. Изучаем C#/ Модуль 6/ 9 из 33
Создание экземпляров объектов Пример создании Синтаксис n При класса необходимо создать объект <Class. Name> для доступа к переменным и методам, класса <object. Name> = new <Class. Name>(); где, определенным вместе с ним. Class. Name: определяет имя класса. object. Name: определяет имя объекта. n n В C# экземпляры объекта создаются с помощью ключевого слова new. При обнаружении ключевого слова new компилятор Just-in-Time (JIT) выделяет память для объекта и возвращает ссылку на выделенную память. Изучаем C#/ Модуль 6/ 10 из 33
Занятие 2 - Методы На втором занятии, Методы, вы изучите: n Объяснения методов. n Объяснение, как создавать методы. n Описание статичных (static) методов. Изучаем C#/ Модуль 6/ 11 из 33
Принципы методов n n n Методы - это функции, объявленные в классе и способные осуществлять операции над переменными класса. Это блоки кода, которые могут принимать параметры и могут иметь значение. Метод реализует поведение объекта, доступ к которому может быть выполнен путем создания экземпляра объекта определенного класса и дальнейшего вызова метода. Изучаем C#/ Модуль 6/ 12 из 33
Создание методов n n n Пример Синтаксис Методы определяют то, как будет выполняться конкретная операция над требуемыми ([list of <access_modifier> <return_type> <Method. Name> class Sum parameters]) { элементами класса. { int Add(int num. One, int num. Two) // { Тело метода Есть некоторые соглашения именования методов. } int add. Result = num. One + num. Two; Имя метода: Console. Write. Line(“Addition = “ + add. Result); где, } Не может быть ключевым словом C#. access_modifier: Указывает область видимости доступа } к методу. Если не указан модификатор Не может содержать пробелы доступа, по умолчанию, метод будет рассматриваться как private. return_type: Указывает тип данных значения, Не может начинаться с (является опциональным). Если метод цифры. возвращаемого методом не Можетвозвращает значения, буквы, символов void. начинаться с указывает ключевое слово Method. Name: Определяет имя метода. подчеркивания или “@” list of parameters: Указывает аргументы для передачи методу. Изучаем C#/ Модуль 6/ 13 из 33
Вызов методов n Для Вывод вызова Пример метода следует указать имя объекта, затем class Book точку (. ), а затем имя метода с C#-The Complete Reference { последующими скобками. string _book. Name; public string Print() { return _book. Name; } public void Input(string bk. Name) { _book. Name = bk. Name; } static void Main(string[] args) { Book obj. Book = new Book(); obj. Book. Input(“C#-The Complete Reference”); Console. Write. Line(obj. Book. Print ()); } Большинство методов вызываются из метода Main() класса, который является точкой входа выполнения программы. n } Изучаем C#/ Модуль 6/ 14 из 33
Статичные методы n Метод Вывод Пример по Синтаксис умолчанию вызывается с помощью объекта класса. class Calculate 60 static <return_type> <Method. Name>() { 200 public static void Addition(int val 1, int val 2) { { // Тело метода Console. Write. Line(val 1 + val 2); n }Статичный метод объявляется с помощью } public void Multiply(int val 1, int val 2) ключевого слова static. { Console. Write. Line(val 1 * val 2); n n } } class Static. Methods { static void Main(string [] args) { Calculate. Addition(10, 50); Calculate obj. Cal = new Calculate(); obj. Cal. Multiply(10, 20); } } Он может обращаться напрямую только к статичным переменным и другим статичным методам класса. Он может обращаться к нестатичным методам и переменным с помощью экземпляра класса. Изучаем C#/ Модуль 6/ 15 из 33
Статичные переменные n n Статичная переменная - специальная переменная, доступ к которой возможен без использования объекта класса. Статичная переменная объявляется с помощью ключевого слова static. Только одна копия статичной переменной разделяется всеми объектами класса. Экземпляр класса не может получать доступ к статичным переменным. Изучаем C#/ Модуль 6/ 16 из 33
Занятие 3 - Модификаторы доступа На третьем занятии, Модификаторы доступа, вы изучите: n Список типов модификаторов доступа. n Объяснение ключевых слов ref и out. Изучаем C#/ Модуль 6/ 17 из 33
Модификаторы доступа n Internal---Модификатор программирование Protected Модификатор доступа private Public - Модификатор доступа public Модификатор доступа protected Private Объектно-ориентированное доступа internal позволяет элементам класса быть элементам обеспечивает уровень максимально разрешенного доступ к элементам класса внутри ограничивать доступ к доступными наименьшего доступа. только для классов той порожденныхзаданным класса, внутри же сборки. доступа. данных а также разрешая его только классов. классам. Пример n Пример Модификаторы указываются с помощью ключевых class Employee {слов C#. public Employee class Sample // Без ограничений доступа. Доступ только внутри класса { public string Name = “Wilson”; private float _salary; // Доступ внутри той же сборки Закрытый доступ } internal static int Num. One = 3; protected float Salary; n В C# есть четыре типа модификаторов доступа: } Public Private Protected internal Изучаем C#/ Модуль 6/ 18 из 33
Ключевое слово “ref” n Ключевое Синтаксис Вывод Пример слово ref передает аргументы методу по Ref. Parameters class ссылке. <access_modifier> <return_type> <Method. Name> (ref { parameter 1, ref parameter 2, parameter 3, parameter 4, . . . static void Calculate(ref int num. Value. One, ref int parameter. N) num. Value. Two) { n {Позволяет вызванному методу изменять num. Value. One = num. Value. One * 2; //num. Value. Two to be performed actions = num. Value. Two / значение параметров, 2; переданных ему из } } static void Main(string[] args) вызываемого метода { где, n int num. One = 10; parameter int num. Two = 20; 1. . parameter. N: Указывает, что может быть Console. Write. Line(“Value of Num 1 andнеобязательно всем method “ любое число параметров, и что Num 2 before calling + num. One + “, “ + num. Two); параметрам быть "ref"- параметрами. Calculate(ref num. One, ref num. Two); Console. Write. Line(“Value of Num 1 and Num 2 after calling method “ + num. One + “, “ + num. Two); Передаваемые по ссылке из вызываемого метода переменные сначала должны быть } инициализированы. } Изучаем C#/ Модуль 6/ 19 из 33
Ключевое слово “out” n Ключевое Вывод Пример Синтаксис слово out похоже на ключевое слово ref и передает аргументы по ссылке. class Out. Parameters <access_modifier> <return_type> <Method. Name> (out { parameter 1, out parameter 2, . . . parameter. N) static void Depreciation(out int val) { { // actions to be performed n Единственное различие между ними в том, val = 20000; } int dep = val * 5/100; что ключевое слово out не требует предварительной int amt = val - dep; где, Console. Write. Line(“Depreciation инициализации переменных. Amount: “ + dep); Console. Write. Line(“Reduced value after depreciation: “ + parameter 1. . parameter. N: Указывает, что может быть amt); число параметров, и что необязательно всем любое } параметрам быть out-параметрами. static void Main(string[] args) { int value; Depreciation(out value); } И вызывающий и вызываемый методы должны явно использовать ключевое слово out. n } Изучаем C#/ Модуль 6/ 20 из 33
Занятие 4 - Перегрузка метода На четвертом занятии, Перегрузка метода, вы изучите: n Описание перегрузки метода. n Указания и ограничения для перегрузки метода. n Использование ключевого слова this. Изучаем C#/ Модуль 6/ 21 из 33
Перегрузка метода n n n Рассмотрим курорт, на котором трудятся двое служащих, имеющих одинаковое имя - Петр. Один из них - повар, другой - инженер. Курьер службы доставки знает, чем занимается каждый из Петров, так что если будет производиться "доставка свежих овощей для Петра" - она будет передана повару. Аналогично "доставка электрических лампочек для Петра" будет направлена инженеру. Несмотря на то, что существуют два Петра, содержимое доставки однозначно указывает - кому из них она предназначена. Аналогично в в C#, два метода могут иметь одинаковое имя, различаясь при помощи сигнатур. Изучаем C#/ Модуль 6/ 22 из 33
Перегрузка метода в C# n В объектно-ориентированном Вывод Пример программировании каждый метод имеет сигнатуру. class Method. Overload. Example Square of integer value 25 { Square of float value 6. 25 n static void Main(string[] args) { Console. Write. Line(“Square of integer value “ + Square(5)); Console. Write. Line(“Square of float value “ + Square(2. 5 F)); n } static int Square(int num) { return num * num; } n static float Square(float num) { return num * num; } } При объявлении метода сигнатура метода пишется в скобках после имени метода. В классе не может быть двух методов с одинаковым именем и сигнатурой. Принцип объявления более одного метода с тем же именем, но разными сигнатурами, называется перегрузкой метода. Изучаем C#/ Модуль 6/ 23 из 33
Рекомендации и ограничения n Необходимо следовать данным рекомендациям для корректной работы перегруженных методов: n Перегружаемые методы должны выполнять ту же задачу. n Сигнатуры перегружаемых методов должны быть уникальны. n Пр перегрузке методов возвращаемый методами тип данных может быть одинаковым, не являясь частью сигнатуры. n Параметры ref и out могут включаться как часть сигнатуры перегружаемых методов. Изучаем C#/ Модуль 6/ 24 из 33
Ключевое слово “this” n Ключевое Вывод Пример слово this используется для указания на конкретный объект класса. class Dimension { double _length; double _breadth; public double Area(double _length, double _breadth) { this. _length = _length; this. _breadth = _breadth; return _length * _breadth; } static void Main(string[] args) { Dimension obj. Dimension = new Dimension(); Console. Write. Line(“Area of rectangle = “ + obj. Dimension. Area(10. 5, 12. 5)); } Оно используется для разрешения конфликтов между переменными с одинаковыми именами и для передачи текущего объекта как параметра. n Нельзя использовать ключевое слово this со статичными переменными и методами. n } Изучаем C#/ Модуль 6/ 25 из 33
Занятие 5 - Конструкторы и деструкторы На последнем занятии, Конструкторы и деструкторы, вы изучите: n Конструкторы в C#. n Конструкторы по умолчанию и их назначение. n Статичные конструкторы и их назначение. n Перегружаемые конструкторы и их назначение. n Деструкторы в C#. n Использование сборщика мусора в C#. Изучаем C#/ Модуль 6/ 26 из 33
Конструкторы n Это метод, Пример имеющий то же имя, что и класс. class Employees { n string _emp. Name; int _emp. Age; string _dept. Name; Employees(string name, int num) { _emp. Name = name; _emp. Age = num; _dept. Name = “Research & Development”; n } static void Main(string[] args) { Employees obj. Emp = new Employees(“John”, 10); Console. Write. Line(obj. Emp. _dept. Name); } } Он может инициализировать переменные класса или осуществлять начальные операции только при создании экземпляра объекта класса. Они автоматически выполняются при создании экземпляра класса. Изучаем C#/ Модуль 6/ 27 из 33
Конструкторы по умолчанию n n n C# создает для класса конструктор по умолчанию, если он явно не указан. Конструктор по умолчанию автоматически инициализирует численные переменные экземпляра класса нулевыми значениями. При определении конструктора класса конструктор по умолчанию более не используется. Изучаем C#/ Модуль 6/ 28 из 33
Статичные конструкторы n Используются Вывод Пример для инициализации статичных переменных класса и для однократного class Multiplication Static Constructor initialized { выполнения указанного действия. Value of product = 100 static int _value. One = 10; static int _product; static Multiplication() { Console. Write. Line(“Static Constructor initialized”); _product = _value. One * _value. One; } public static void Method() { Console. Write. Line(“Value of product = “ + _product); } static void Main(string[] args) { Multiplication. Method(); } Используются для объявления конструктора статичным. n Не используют никаких параметров и никаких модификаторов доступа. n n } Не могут получать доступ к нестатичным элементам класса. Изучаем C#/ Модуль 6/ 29 из 33
Перегрузка конструктора n Принцип Вывод Пример объявления более одного конструктора в классе называется перегрузкой конструктора. public class Rectangle { double _length; double _breadth; public Rectangle() { _length = 13. 5; _breadth = 20. 5; } public Rectangle(double len, double wide) { _length = len; _breadth = wide; } public double Area() { return _length * _breadth; } static void Main(string[] args) { Rectangle obj. Rect 1 = new Rectangle(); Console. Write. Line(“Area of rectangle = “ + obj. Rect 1. Area()); Rectangle obj. Rect 2 = new Rectangle(2. 5, 6. 9); Console. Write. Line(“Area of rectangle = “ + obj. Rect 2. Area()); } } Area of rectangle 1 = 276. 75 Area of rectangle 2 = 17. 25 n n n Процесс перегрузки конструктора аналогичен перегрузке метода. Используется, если различным объектам класса необходимо использовать различные инициализирующие значения. Упрощают задачу присваивания различных значений переменным элементов класса для каждого различного объекта класса. Изучаем C#/ Модуль 6/ 30 из 33
Деструкторы n n n Это специальный Пример метод, имеющий то же имя, что и класс, но начинающийся с символа “~” перед именем класса. Он моментально изымает из использования память объектов, которые более не требуются. Кроме этого, деструкторы имеют некоторые другие особенности: Деструкторы не могут перегружаться или наследоваться. Деструкторы нельзя явно вызывать. Деструкторы не могут содержать модификаторов доступа и использовать Изучаем C#/ Модуль 6/ 31 из 33 параметров. class Employee { private int _emp. Id; private string _emp. Name; private int _age; private double _salary; Employee(int id, string name, int age, double sal) { Console. Write. Line(“Constructor for Employee called”); _emp. Id = id; _emp. Name = name; _age = age; _salary = sal; } ~Employee() { Console. Write. Line(“Destructor for Employee called”); } static void Main(string[] args) { Employee emp = new Employee(1, “John”, 45, 35000); Console. Write. Line(“Employee ID: “ + emp. _emp. Id); Console. Write. Line(“Employee Name: “ + emp. _emp. Name); Console. Write. Line(“Age: “ + emp. _age); Console. Write. Line(“Salary: “ + emp. _salary); } }
Сборщик мусора n n Необходимо освобождать память объектов, которые более не используются. Это производится механизмом, называемым сборщиком мусора, обеспечиваемым. NET Framework. Он освобождает память от неиспользуемых объектов программы. Он осуществляет требуемые действия для освобождения памяти для других необходимых объектов. Изучаем C#/ Модуль 6/ 32 из 33
Резюме n Классы и объекты n n Методы n n Модификаторы доступа определяют область видимости для классов и их элементов. Перегрузка метода n n Метод определяется как актуальная реализация действия над объектом. Модификаторы доступа n n Класс - это шаблон или образец, определяющий состояние и поведение всех объектов, принадлежащих к этому классу Методы с одинаковыми именами, но разными сигнатурами, называются перегружаемыми. Конструкторы и деструкторы n Конструктор обычно используется для инициализации переменных класса. Изучаем C#/ Модуль 6/ 33 из 33
ExpC_Module 6ru_1.ppt