Проектирование и использование классов

Завершено

В объектно-ориентированном программировании (OOP) классы являются стандартными блоками приложения. Важно понимать связь между классами и объектами.

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

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

Реальные объекты

Люди взаимодействуют с объектами постоянно в их повседневной жизни. На самом деле, почти все, с чем мы взаимодействуем, можно рассматривать как объект.

Следующие критерии можно использовать для определения объектов в реальном мире:

  • Объекты — это то, что мы можем видеть и касаться.
  • Объекты имеют назначение.
  • Объекты имеют части, поддерживающие их назначение.

Карандаш является примером физического объекта. Цель карандаша — создать заметку или рисунок. Части карандаша включают тело, кончик и, возможно, ластик. Части работают вместе, чтобы достичь целевой цели карандаша.

Существуют также физические объекты, которые существуют как сборка других объектов. В следующем списке приведены примеры объектов, состоящих из других объектов:

  • Автомобиль: цель автомобиля заключается в предоставлении наземного транспорта для лиц и семей. Части автомобиля включают двигатель, колеса, рулевое колесо и многие другие. Части автомобиля работают вместе, чтобы обеспечить наземный транспорт.
  • Дом: Цель дома заключается в предоставлении убежища. Части дома включают фундамент, внешние стены, крышу и комнаты. Эти части работают вместе для создания жилого пространства.
  • Смарт-телефон: цель смарт-телефона — помочь пользователю с повседневными задачами и действиями. Части смарт-телефона включают экран, микропроцессор, память и хранилище, батарею, камеры и кнопки. Эти части работают вместе, чтобы обеспечить взаимодействие, развлечения и функции повышения продуктивности.

Каждая часть автомобиля, дома или смарт-телефона является объектом с собственной целью, а также может быть сборкой объектов.

Атрибуты и признаки физического объекта

Минуту, чтобы рассмотреть пример карандаша. Карандаш имеет части (тело, наконечник, ластик) и назначение (создавать заметку или рисунок). Карандаши разделяют эти основные характеристики. Однако не все карандаши одинаковы.

Некоторые карандаши короткие, некоторые из них длинные. Некоторые карандаши желтые, некоторые из них черные. Некоторые карандаши имеют тупой кончик, некоторые из них имеют острый кончик. У некоторых карандашей есть ластик, у некоторых нет ластика.

Атрибуты объекта часто делятся на следующие физические и поведенческие категории:

  • Физические: физические атрибуты — это аспекты объекта, который можно увидеть или измерить.
  • Поведение. Атрибуты поведения — это аспекты объекта, описывающего его возможности или взаимодействие с другими объектами.

Для примера карандаша физические атрибуты включают длину корпуса, цвет корпуса, остроту кончика и наличие ластика на карандаше. К атрибутам поведения относятся возможность записи, возможность удаления и возможность заточки. Карандаш взаимодействует с бумагой или другими твердыми объектами, на которые можно написать или нарисовать.

Физические атрибуты часто называются свойствами, а атрибуты поведения часто называются функциями (методами программирования на C#).

Классы кода и объекты в программировании на C#

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

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

Объекты кода, как и физические объекты, могут иметь разные значения, назначенные его свойствам.

Классы инкапсулируют данные и поведение

Классы предоставляют способ инкапсулировать данные и поведение. Инкапсуляция — это процесс объединения данных и поведения в одну единицу. Классы используют свойства для включения доступа к данным и методам для включения поведения.

Свойства класса

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

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

Значения свойств можно считывать с помощью метода доступа get и назначать с помощью метода доступа set.

Методы класса

Методы классов определяют действия (поведение), которые может выполнять класс.

Методы могут принимать параметры, предоставляющие входные данные, и могут возвращать выходные данные с помощью параметров. Методы также могут напрямую возвращать значение без использования параметра.

Например, класс Console включает WriteLine, ReadLineи методы Clear (среди прочего). Эти методы помогают активировать предполагаемое поведение класса Console. Методы можно использовать для выполнения действий, таких как вычисления, манипуляция данными или взаимодействие с другими объектами.

Методы часто предназначены для принятия одного или нескольких аргументов метода. Аргументы метода передаются методу в качестве параметров инструкции вызова, используемой для вызова метода. Например, метод WriteLine класса Console может принимать строковый аргумент, предоставленный оператором вызова.

Определения классов в коде C#

В следующем примере показан простой класс в C#. Класс Phone имеет свойства для Brand, Modelи Year. Класс также включает методы для Call и Text.


public class Phone
{
    public string? Brand { get; set; }
    public string? Model { get; set; }
    public int Year { get; set; }

    public void Call(string phoneNumber)
    {
        Console.WriteLine($"Calling {phoneNumber}...");
    }

    public void Text(string phoneNumber, string message)
    {
        Console.WriteLine($"Texting {phoneNumber}: {message}");
    }
}

Использование пространств имен

В программировании на C# пространства имен используются двумя способами:

  • Библиотека классов .NET использует пространства имен для упорядочивания многих классов.
  • Разработчики объявляют свои собственные пространства имен, чтобы управлять областью имен классов и методов в более крупных проектах программирования.

Пространства имен в библиотеке классов .NET

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

Рассмотрим следующий фрагмент кода:


System.Console.WriteLine("Hello World!");

В этом примере System — это пространство имен, а Console — это класс в этом пространстве имен.

Предоставление полного имени класса (System.Console) гарантирует, что используется правильный класс. Использование полных имен может быть обременительным, если вы работаете со многими классами из одного и того же пространства имен. Чтобы улучшить удобочитаемость кода, можно использовать директиву using. Директива using позволяет использовать типы, определенные в пространстве имен, не указывая полное пространство имен этого типа.

Следующий фрагмент кода реализует директиву using для улучшения удобочитаемости кода:


using System;

Console.WriteLine("Hello World!");

Заметка

Начиная с .NET 6, неявные директивы ,,global using добавляются в новые проекты C#. Это означает, что вы можете использовать типы, определенные в данных пространствах имен, не указывая их полное имя или самостоятельно вручную добавляя директиву using. неявным аспектом относится к тому, что глобальные директивы using добавляются в созданный файл в каталоге obj проекта. Эта функция позволяет использовать Console.WriteLine без явного объявления using System при разработке приложений в версиях 6.0 или более поздней версии .NET.

Упорядочение классов с помощью пространств имен

Объявление собственных пространств имен позволяет управлять областью имен классов и методов в более крупных проектах программирования. Используйте ключевое слово namespace для объявления пространства имен.

Рассмотрим следующий фрагмент кода:


namespace SampleNamespace
{
    class SampleClass
    {
        public void SampleMethod()
        {
            System.Console.WriteLine("SampleMethod inside SampleNamespace");
        }
    }
}

Имя пространства имен должно быть допустимым именем идентификатора C#.

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


namespace SampleNamespace;

class SampleClass
{
    public void SampleMethod()
    {
        System.Console.WriteLine("SampleMethod inside SampleNamespace");
    }
}

class AnotherSampleClass
{
    public void AnotherSampleMethod()
    {
        System.Console.WriteLine("AnotherSampleMethod inside SampleNamespace");
    }
}

Преимущество этого нового синтаксиса заключается в том, что это проще, экономия горизонтального пространства и фигурных скобок. Это упрощает чтение кода.

Обзор пространств имен

Пространства имен имеют следующие свойства:

  • Они упорядочивают большие проекты кода.
  • Они разделены с помощью оператора ..
  • Директива using устраняет необходимость указывать имя пространства имен для каждого класса.
  • Глобальное пространство имен — это корневое пространство имен: global::System всегда ссылается на пространство имен системы .NET.

Использование пространств имен для группирования связанных типов вместе упрощает поиск и их использование.