Cíle
Cílem semináře je naučit se základy objektově orientovaného programování a základy práce s datovými strukturami v Matlabu.
Struktury
Struktury v Matlabu, podobně jako v jiných jazycích, umožňují seskupovat související data. K definici a pro přístup k jednotlivým polím struktury se používá tečková notace. Jednotlivá pole nemusjí mít stejný datový typ.
Příklad:
student.name = 'jim';
student.gpa = 4.0;
Dále můžeme v matlabu vytvářet i pole struktur. Pro indexování těchto polí můžeme pooužívat chytré indexování jako u matic.
Příklad:
students(1).name = 'jim';
students(1).age = 21;
students(2).name = 'Alex';
students(2).age = 24;
students(3).name = 'Janet';
students(3).age = 19;
Více ke strukturám zde.
Srovnání struktur a polí typu cell array
je pak možné si přečíst zde.
Objektově orientované programování
Třídy
Syntaxe:
classdef (attribute-name = expression, ...) MyClass
body
end
Definice třídy začíná klíčovým slovem classdef
.
MyClass je název dřídy.
Seznam unvitř kulatých závorek je nepovinný seznam atributů třídy.
Pomocí nich lze například určit, zda se jedná o abstraktní třídu, jestli je umožněno z této třídy dědit atd.
V těle třídy dále mohou být definovány vlastnosti a metody.
Definice vlastností začíná klíčovým slovem properties
a končí klíčovým slovem end
:
properties (Attribute1 = value1, Attribute2 = value2,...)
property1
end
Definice metod začíná klíčovým slovem methods
a končí klíčovým slovem end
.
methods (Attribute1 = value1, Attribute2 = value2,...)
function ...
end
Třídy mohou obsahovat více bloků properties
a methods
.
(Attribute1 = value1, Attribute2 = value2,...)
je seznam atributů platných v daném bloku.
Lze pomocí nich například definovat statické metody.
Pro třídy lze také vytvářet vlastní konstruktory. Ty lze vytvořit stejným postupem jako metody, stačí danou metodu pojmenovat stejně jako třídu, ve které se daná metoda nachazí.
Příklad:
classdef bod
%BOD priklad jednoduche tridy
%verejne vlastnosti
properties
x;
y;
end
% privatni vlastnosti
properties (Access=private)
barva;
end
methods
% konstruktor
function objekt=bod(x, y)
objekt.x = x;
objekt.y = y;
end
function barva = getBarva(objekt)
barva = objekt.barva;
end
function objekt = setBarva(objekt, barva)
objekt.barva = barva;
end
end
end
Dědičnost
Seznam tříd, ze kterých třída dědí se píše za jméno třídy.
classdef (attribute-name = expression, ...) MyClass < SuperClass1 & ... & SuperClassN
Příklad:
classdef PositiveDouble < double
methods
function obj = PositiveDouble(data)
if nargin == 0
data = 1;
else
mustBePositive(data)
end
obj = obj@double(data);
end
end
end