Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Методы в Си-шарп. Разница между простыми и статическими




Понятие объектно-ориентированного программирования (ООП). Классы и объекты

Понятие объектно-ориентированное программирование (ООП) означает один из самых эффективных подходов к современному программированию.

Раньше программисты, в большинстве случаев, использовали функциональный или процедурный принцип программирования. Все программы, большие и маленькие, писались в одном файле. С течением времени программы становились всё сложнее и больше, что доставляло проблемы разработчикам при поддержке таких программ и внесении изменений. Эту проблему решает объектно-ориентированное программирование. ООП позволяет объединить данные и методы, относящиеся к одной сущности, и работать с ними, как с одним целым.

Классы и объекты. В чем разница?

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

Пример

Допустим, нам в программе необходимо работать со странами. Страна – это абстрактное понятие. У нее есть такие характеристики, как название, население, площадь, флаг и другое. Для описания такой страны будет использоваться класс с соответствующими полями данных. Такие страны, как Россия и Украина будут уже объектами (конкретными представителями типа страна).

Основные принципы объектно-ориентированного программирования

ООП основывается на нескольких базовых принципах, каждому из которых будет посвящен отдельный урок, а пока коротко рассмотрим их.

Инкапсуляция – позволяет скрывать внутреннюю реализацию. В классе могут быть реализованы внутренние вспомогательные методы, поля, к которым доступ для пользователя необходимо запретить, тут и используется инкапсуляция. Больше об инкапсуляции читайте в уроке Инкапсуляция в Си-шарп. Модификаторы доступа.

Наследования – позволяет создавать новый класс на базе другого. Класс, на базе которого создается новый класс, называется базовым, а базирующийся новый класс – наследником. Например, есть базовый класс животное. В нем описаны общие характеристики для всех животных (класс животного, вес). На базе этого класса можно создать классы наследники Собака, Слон со своими специфическими свойствами. Все свойства и методы базового класса при наследовании переходят в класс наследник. Больше о наследовании читайте в уроке Наследование в Си-шарп.

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

Абстракция – позволяет выделять из некоторой сущности только необходимые характеристики и методы, которые в полной мере (для поставленной задачи) описывают объект. Например, создавая класс для описания студента, мы выделяем только необходимые его характеристики, такие как ФИО, номер зачетной книжки, группа. Здесь нет смысла добавлять поле вес или имя его кота/собаки и т.д.

Все так запутано

Конечно, для тех, кто совсем не знаком с ООП, все это может показаться сложным, и сразу понять, что к чему будет сложно. Но с дальнейшими уроками подход ООП для вас будет проясняться, и станет понятно, что всё очень логично.

 

Классы в Си-шарп. Объявление классов и создание объектов

Класс – это абстрактный тип данных. Другими словами, класс – это некоторый шаблон, на основе которого будут создаваться его экземпляры – объекты.

В Си-шарп классы объявляются с помощью ключевого слова class. Общая структура объявления выглядит следующим образом:

[модификатор доступа] class [имя_класса]
{
//тело класса
}


Модификаторов доступа для классов есть два:

- public – доступ к классу возможен из любого места одной сборки либо из другой сборки, на которую есть ссылка;
- internal – доступ к классу возможен только из сборки, в которой он объявлен.

Что такое сборка?

Сборка (assembly) – это готовый функциональный модуль в виде exe либо dll файла (файлов), который содержит скомпилированный код для.NET. Сборка предоставляет возможность повторного использования кода.

При объявлении класса модификатор доступа можно не указывать, при этом будет применяться режим по умолчанию internal.

Класс следует объявлять внутри пространства имен namespace, но за пределами другого класса (возможно также объявление класса внутри другого - вложенные типы, но это тема отдельного урока).

Пример объявления классов Student и Pupil:

namespace HelloWorld
{
class Student //без указания модификатор доступа, класс будет internal
{
//тело класса
}
public class Pupil
{
//тело класса
}
}


Члены класса

Классы в Си-шарп могут содержать следующие члены:

- поля;
- константы;
- свойства;
- конструкторы;
- методы;
- события;
- операторы;
- индексаторы;
- вложенные типы.

Все члены класса, как и сам класс, имеют свой уровень доступа. Только у членов их может быть уже пять:

- public – доступ к члену возможен из любого места одной сборки, либо из другой сборки, на которую есть ссылка;
- protected – доступ к члену возможен только внутри класса, либо в классе-наследнике (при наследовании);
- internal – доступ к члену возможен только из сборки, в которой он объявлен;
- private – доступ к члену возможен только внутри класса;
- protected internal - доступ к члену возможен из одной сборки, либо из класса-наследника другой сборки.

Не указав модификатор доступа для члена, по умолчанию ему будет присвоен режим private.

При помощи модификаторов доступа в Си-шарп реализуется один из базовых принципов ООП – инкапсуляция.

В этом уроке мы рассмотрим такие члены класса, как поля и константы.

Поля класса

Поле – это переменная, объявленная внутри класса. Как правило, поля объявляются с модификаторами доступа private либо protected, чтобы запретить прямой доступ к ним. Для получения доступа к полям следует использовать свойства или методы.

Пример объявления полей в классе:

class Student
{
private string firstName;
private string lastName;
private int age;
public string group; // не рекомендуется использовать public для поля
}


Создание объектов

Объявив класс, мы теперь можем создавать объекты. Делается это при помощи ключевого слова new и имени класса:

namespace HelloWorld
{
class Student
{
private string firstName;
private string lastName;
private int age;
public string group;
}
class Program
{
static void Main(string[] args)
{
Student student1 = new Student(); //создание объекта student1 класса Student
Student student2 = new Student();
}
}
}


Доступ к членам объекта осуществляется при помощи оператора точка «.»:

static void Main(string[] args)
{
Student student1 = new Student();
Student student2 = new Student();

student1.group = "Group1";
student2.group = "Group2";

Console.WriteLine(student1.group); // выводит на экран "Group1"
Console.Write(student2.group);
Console.ReadKey();
}


Такие поля класса Student, как firstName, lastName и age указанны с модификатором доступа private, поэтому доступ к ним будет запрещен вне класса:

static void Main(string[] args)
{
Student student1 = new Student();
student1.firstName= "Nikolay"; //ошибка, нет доступа к полю firstName. Программа не скомпилируется
}


Константы

Константы-члены класса ничем не отличаются от простых констант внутри методов, которые рассматривались в уроке переменные и константы.

Константа – это переменная, значений которое нельзя изменить. Константа объявляется с помощью ключевого слова const. Пример объявления константы:

class Math
{
private const double Pi = 3.14;
}

 

Домашнее задание

Создайте какой-нибудь класс (например класс Автомобиль), объявите в нем поля с различными режимами доступа (private, protected, internal, public). Создайте объект класса, и попытайтесь записать/получить данные с различных полей.

 

Методы в Си-шарп. Разница между простыми и статическими

Метод – это небольшая подпрограмма, которая выполняет, в идеале, только одну функцию. Методы позволяют сократить объем кода.

Методы вместе с полями, являются основными членами класса.

Ранее, мы уже рассматривали методы в уроке Функции в Си-шарп, но сейчас мы рассмотрим их под других углом.

В том уроке мы рассматривали статические методы, а в этом поговорим о простых, и о разнице между ними.

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

Простой метод – это метод, который имеет доступ к данным объекта, и его вызов выполняется через объект.

Простые методы служат для обработки внутренних данных объекта.

Приведу пример использования простого метода. Класс Телевизор, у него есть поле switchedOn, которое отображает состояние включен/выключен, и два метода – включение и выключение:

class TVSet
{
private bool switchedOn;

public void SwitchOn()
{
switchedOn = true;
}
public void SwitchOff()
{
switchedOn = false;
}
}
class Program
{
static void Main(string[] args)
{
TVSet myTV = new TVSet();
myTV.SwitchOn(); // включаем телевизор, switchedOn = true;
myTV.SwitchOff(); // выключаем телевизор, switchedOn = false;
}
}


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

Статические методы, обычно, выполняют какую-нибудь глобальную, общую функцию, обрабатывают «внешние данные». Например, сортировка массива, обработка строки, возведение числа в степень и другое.

Пример статического метода, который обрезает строку до указанной длины, и добавляет троеточие:

class StringHelper
{
public static string TrimIt(string s, int max)
{
if (s == null)
return string.Empty;
if (s.Length <= max)
return s;

return s.Substring(0, max) + "...";
}
}
class Program
{
static void Main(string[] args)
{
string s = "Очень длинная строка, которую необходимо обрезать до указанной длины и добавить троеточие";
Console.WriteLine(StringHelper.TrimIt(s, 20)); //"Очень длинная строка…"
Console.ReadLine();
}
}


Статический метод не имеет доступа к нестатическим полям класса:

class SomeClass
{
private int a;
private static int b;

public static void SomeMethod()
{
a=5; // ошибка
b=10; // допустимо
}
}


Домашнее задание

Создайте класс Телевизор. В нем есть поле текущий канал. Предусмотрите в нем возможность переключения каналов: следующий канал, предыдущий канал, переход к каналу по номеру. Учтите, что канал не может иметь отрицательный номер.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...