Объектно-ориентированное программирование (ООП) в MATLAB

Опубликовано: 15 Сентября, 2022

Объектно-ориентированное программирование (ООП) в MATLAB похоже на многие традиционные языки программирования, такие как Java, Python и т. д., за исключением синтаксиса. Важной особенностью ООП является то, что они позволяют объединять данные и связанные с ними действия (методы/функции) в объекты. По сравнению с другими языками, такими как C++, Java и т. д., объектно-ориентированное программирование будет намного быстрее в MATLAB, что позволит вам решать сложные вычислительные приложения. В ООП есть определенные функции, которые можно использовать для решения сложных задач, обеспечения безопасности данных и т. д.

Функции ООП , поддерживаемые MATLAB:

  • Объект
  • Учебный класс
  • Полиморфизм
  • Наследование
  • Абстракция
  • Инкапсуляция

Теперь давайте рассмотрим несколько примеров, чтобы лучше понять приведенные выше концепции.

Учебный класс

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

Syntax:

        classdef (attributes) className 

        . . . . .

        end

Parameters:

           classdef       ->   keyword used to define classes

          attributes     ->    Arguments/Values used to modify the behaviour of class

Пример:

Matlab




% MATLAB program to illustrate Classes
 
classdef adder
     
    % Attributes of a class are defined
    % in properties block
    properties
        value
    end
     
    % Function/Methods of class are defined
    % in methods block
    methods
        function res = addVal(obj)
            res = obj.value+obj.value;
        end
    end
end


Сохраните приведенный выше код как файл adder.m и получите доступ к нему с помощью команд из командной строки/другого файла Matlab. Давайте получим доступ к приведенному выше коду, дав некоторые команды из другого файла Matlab, и посмотрим на вывод, чтобы лучше понять его.

Matlab




% MATLAB program to access the
% user defined classes
 
% Initiating the Class
temp=testing();
 
% Assign values to the class attributes
temp.value=5;
 
% Calling methods inside the class
addVal(temp)

Сохраните приведенный выше код как testing.m. После выполнения вышеуказанного файла вы получите следующий вывод.

Объект

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

Наследование

Само название предполагает, что наследование — это не что иное, как наследование/приобретение всех свойств, таких как атрибуты, методы и т. д. родительского/базового класса. Класс, производный от базового класса, называется подклассом/ дочерним классом и наследует все свойства родительского класса. Суперкласс — это класс, который наследуется подклассом. Важность наследования заключается в возможности повторного использования кода, такого как использование атрибутов, методов и т. д. родительского класса. Давайте углубимся в пример, чтобы лучше понять концепцию наследования.

Syntax:

        classdef subClassName < SuperClass

        . . . . . . .

        end

Супер класс:

Matlab




% MATLAB program to illustrate Super class
% and inheritance.
 
classdef Animal
     
    methods
 
        function eat(self)
            disp("I am Eating");
        end
 
        function sleep(self)
            disp("I am Sleeping");
        end
        
    end
     
end

Сохраните приведенный выше код как Animal.m , и это наш суперкласс. Давайте теперь посмотрим на подкласс.

Matlab




% MATLAB program to illustrate
% sub class and inheritance
 
classdef Lion < Animal
     
    methods
         
        function roar(self)
            disp("Roaring");
        end
         
    end
     
end


Сохраните приведенный выше код как Lion.m , и это наш подкласс. Теперь давайте получим доступ к родительскому классу, используя объект подкласса, и посмотрим на результат.

Выход:

Полиморфизм

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

Суперкласс:

Matlab




% An example of polymorphism in MATLAB
 
classdef superClass
    
    methods
     
        function testing(self)
            disp("This is superClass");
        end
         
    end
     
end

Сохраните приведенный выше код как superClass.m и давайте также посмотрим код производного класса.

Производный класс:

Matlab




% An example of polymorphism in MATLAB
 
classdef derivedClass < superClass
     
    methods
     
        % Overriding the superClass method
        function testing(self)
            disp("This is derivedClass");
        end
    end
     
end


Сохраните приведенный выше код как производный класс.m и давайте посмотрим на результат.

Выход:

Абстракция

Абстрактный класс отображает функциональность, выполняемую группой классов. Он скрывает важные или ненужные данные и показывает только основные компоненты. Например, можно просматривать мобильный телефон, но не его внутренние компоненты. Все методы и атрибуты, которые используются подклассами, объявлены в абстрактном классе. Конкретный подкласс является производным от абстрактного класса для использования его свойств. Аннотация не может быть создана. Его можно только передать по наследству. Все методы, объявленные в абстрактном классе, должны быть переопределены/переопределены в подклассе.

Syntax:

           classdef (Abstract) className:

           . . . . .

           end

Пример:

Matlab




% An example of abstract class in MATLAB
 
classdef (Abstract) superClass
     
    % Declaring abstract properties
    properties (Abstract)
        value1
    end
     
    % Declaring abstract methods
    methods (Abstract)
        checking(obj)
    end
     
end


Сохраните приведенный выше код как superClass.m и давайте посмотрим код базового класса.

Matlab




% An example of abstract base class in MATLAB
 
classdef derivedClass < superClass
     
    % Redefining abstract properties
    properties
        value1 = 0;
    end
     
    % Redefining abstract methods
    methods
        function checking(self)
            disp("This is abstract method of superClass and redefined in the derivedClass");
            fprintf("The initial of the property "value1" is %d",self.value1);
        end
    end
     
end


Сохраните приведенный выше код как производный класс.m , выполните код и наблюдайте за выводом, дав пару команд.

Выход:

Инкапсуляция

Предпосылка: документация MATLAB по классам значений и дескрипторов.

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

МАТЛАБ –

Сохраните приведенный выше код как superClass.m и давайте посмотрим на результат, дав пару команд.

Выход:

Примечание:

  • В MATLAB переменные класса называются свойствами.
  • В MATLAB классы и методы определяются в отдельных файлах.
  • Мы должны сохранить файлы классов и файлы методов с соответствующими именами.