Программирование дротиков - классы
Dart - объектно-ориентированный язык. Он поддерживает функции объектно-ориентированного программирования, такие как классы, интерфейсы и т. Д.classс точки зрения ООП - это план создания объектов. Аclassинкапсулирует данные для объекта. Dart предоставляет встроенную поддержку этой концепции под названиемclass.
Объявление класса
Использовать class ключевое слово для объявления classв Дарт. Определение класса начинается с ключевого слова class, за которым следуетclass name; и тело класса, заключенное в фигурные скобки. Синтаксис для этого же приведен ниже -
Синтаксис
class class_name {
<fields>
<getters/setters>
<constructors>
<functions>
}
В classза ключевым словом следует имя класса. При именовании класса необходимо учитывать правила для идентификаторов.
Определение класса может включать следующее:
Fields- Поле - это любая переменная, объявленная в классе. Поля представляют данные, относящиеся к объектам.
Setters and Getters- Позволяет программе инициализировать и получать значения полей класса. С каждым классом связан геттер / сеттер по умолчанию. Однако значения по умолчанию можно переопределить, явно указав установщик / получатель.
Constructors - отвечает за выделение памяти для объектов класса.
Functions- Функции представляют действия, которые может выполнять объект. Иногда их также называют методами.
Эти компоненты вместе называются data members класса.
Пример: объявление класса
class Car {
// field
String engine = "E1001";
// function
void disp() {
print(engine);
}
}
В примере объявляется класс Car. В классе есть поле с именемengine. Вdisp() это простая функция, которая печатает значение поля engine.
Создание экземпляра класса
Чтобы создать экземпляр класса, используйте newключевое слово, за которым следует имя класса. Синтаксис для этого же приведен ниже -
Синтаксис
var object_name = new class_name([ arguments ])
В new ключевое слово отвечает за создание экземпляра.
Правая часть выражения вызывает конструктор. Конструктору следует передавать значения, если он параметризован.
Пример: создание класса
var obj = new Car("Engine 1")
Доступ к атрибутам и функциям
Доступ к атрибутам и функциям класса можно получить через объект. Использовать '.' точечная запись (называемаяperiod) для доступа к элементам данных класса.
//accessing an attribute
obj.field_name
//accessing a function
obj.function_name()
пример
Взгляните на следующий пример, чтобы понять, как получить доступ к атрибутам и функциям в Dart:
void main() {
Car c= new Car();
c.disp();
}
class Car {
// field
String engine = "E1001";
// function
void disp() {
print(engine);
}
}
В output приведенного выше кода выглядит следующим образом -
E1001
Конструкторы дротиков
Конструктор - это специальная функция класса, которая отвечает за инициализацию переменных класса. Dart определяет конструктор с тем же именем, что и у класса. Конструктор - это функция, поэтому его можно параметризовать. Однако, в отличие от функции, конструкторы не могут иметь возвращаемый тип. Если вы не объявляете конструктор, по умолчаниюno-argument constructor предоставляется для вас.
Синтаксис
Class_name(parameter_list) {
//constructor body
}
пример
В следующем примере показано, как использовать конструкторы в Dart -
void main() {
Car c = new Car('E1001');
}
class Car {
Car(String engine) {
print(engine);
}
}
Должно получиться следующее output -
E1001
Именованные конструкторы
Дарт предоставляет named constructors чтобы разрешить определение класса multiple constructors. Синтаксис именованных конструкторов приведен ниже -
Синтаксис: определение конструктора
Class_name.constructor_name(param_list)
пример
В следующем примере показано, как вы можете использовать именованные конструкторы в Dart.
void main() {
Car c1 = new Car.namedConst('E1001');
Car c2 = new Car();
}
class Car {
Car() {
print("Non-parameterized constructor invoked");
}
Car.namedConst(String engine) {
print("The engine is : ${engine}");
}
}
Должно получиться следующее output -
The engine is : E1001
Non-parameterized constructor invoked
Это ключевое слово
В thisключевое слово относится к текущему экземпляру класса. Здесь имя параметра и имя поля класса совпадают. Следовательно, чтобы избежать двусмысленности, поле класса имеет префиксthisключевое слово. Следующий пример объясняет то же самое -
пример
В следующем примере объясняется, как использовать this ключевое слово в Dart -
void main() {
Car c1 = new Car('E1001');
}
class Car {
String engine;
Car(String engine) {
this.engine = engine;
print("The engine is : ${engine}");
}
}
Должно получиться следующее output -
The engine is : E1001
Класс Dart ─ геттеры и сеттеры
Getters и Setters, также называемый accessors и mutators, позволяют программе инициализировать и получать значения полей класса соответственно. Геттеры или аксессоры определяются с помощьюgetключевое слово. Сеттеры или мутаторы определяются с помощьюset ключевое слово.
С каждым классом связан геттер / сеттер по умолчанию. Однако значения по умолчанию можно переопределить, явно указав установщик / получатель. Получатель не имеет параметров и возвращает значение, а метод установки имеет один параметр и не возвращает значение.
Синтаксис: определение получателя
Return_type get identifier
{
}
Синтаксис: определение установщика
set identifier
{
}
пример
В следующем примере показано, как можно использовать getters и setters в классе Dart -
class Student {
String name;
int age;
String get stud_name {
return name;
}
void set stud_name(String name) {
this.name = name;
}
void set stud_age(int age) {
if(age<= 0) {
print("Age should be greater than 5");
} else {
this.age = age;
}
}
int get stud_age {
return age;
}
}
void main() {
Student s1 = new Student();
s1.stud_name = 'MARK';
s1.stud_age = 0;
print(s1.stud_name);
print(s1.stud_age);
}
Этот программный код должен выдавать следующие output -
Age should be greater than 5
MARK
Null
Наследование класса
Dart поддерживает концепцию наследования, которая представляет собой способность программы создавать новые классы из существующего класса. Класс, который расширен для создания новых классов, называется родительским классом / суперклассом. Вновь созданные классы называются дочерними / подклассами.
Класс наследуется от другого класса с помощью ключевого слова extends. Child classes inherit all properties and methods except constructors from the parent class.
Синтаксис
class child_class_name extends parent_class_name
Note - Dart не поддерживает множественное наследование.
Пример: наследование класса
В следующем примере мы объявляем класс Shape. Класс расширяется за счетCircleкласс. Поскольку между классами существует отношение наследования, дочерний класс, т. Е. КлассCar получает неявный доступ к члену данных своего родительского класса.
void main() {
var obj = new Circle();
obj.cal_area();
}
class Shape {
void cal_area() {
print("calling calc area defined in the Shape class");
}
}
class Circle extends Shape {}
Должно получиться следующее output -
calling calc area defined in the Shape class
Типы наследования
Наследование может быть следующих трех типов -
Single - Каждый класс может происходить максимум от одного родительского класса.
Multiple- Класс может наследовать от нескольких классов. Dart не поддерживает множественное наследование.
Multi-level - Класс может наследовать от другого дочернего класса.
пример
В следующем примере показано, как работает многоуровневое наследование.
void main() {
var obj = new Leaf();
obj.str = "hello";
print(obj.str);
}
class Root {
String str;
}
class Child extends Root {}
class Leaf extends Child {}
//indirectly inherits from Root by virtue of inheritance
Класс Leafнаследует атрибуты от корневых и дочерних классов на основании многоуровневого наследования. этоoutput выглядит следующим образом -
hello
Dart - наследование классов и переопределение методов
Переопределение метода - это механизм, с помощью которого дочерний класс переопределяет метод в своем родительском классе. Следующий пример иллюстрирует то же самое -
пример
void main() {
Child c = new Child();
c.m1(12);
}
class Parent {
void m1(int a){ print("value of a ${a}");}
}
class Child extends Parent {
@override
void m1(int b) {
print("value of b ${b}");
}
}
Должно получиться следующее output -
value of b 12
Количество и тип параметров функции должны совпадать при переопределении метода. В случае несоответствия количества параметров или их типа данных компилятор Dart выдает ошибку. Следующая иллюстрация объясняет то же самое -
import 'dart:io';
void main() {
Child c = new Child();
c.m1(12);
}
class Parent {
void m1(int a){ print("value of a ${a}");}
}
class Child extends Parent {
@override
void m1(String b) {
print("value of b ${b}");
}
}
Должно получиться следующее output -
value of b 12
Статическое ключевое слово
В static ключевое слово может быть применено к членам данных класса, т. е. fields и methods. Статическая переменная сохраняет свои значения до завершения выполнения программы. На статические члены ссылаются по имени класса.
пример
class StaticMem {
static int num;
static disp() {
print("The value of num is ${StaticMem.num}") ;
}
}
void main() {
StaticMem.num = 12;
// initialize the static variable }
StaticMem.disp();
// invoke the static method
}
Должно получиться следующее output -
The value of num is 12
Супер ключевое слово
В superключевое слово используется для ссылки на непосредственного родителя класса. Ключевое слово может использоваться для обозначения версии суперклассаvariable, property, или же method. Следующий пример иллюстрирует то же самое -
пример
void main() {
Child c = new Child();
c.m1(12);
}
class Parent {
String msg = "message variable from the parent class";
void m1(int a){ print("value of a ${a}");}
}
class Child extends Parent {
@override
void m1(int b) {
print("value of b ${b}");
super.m1(13);
print("${super.msg}") ;
}
}
Должно получиться следующее output -
value of b 12
value of a 13
message variable from the parent class