Seminář 4 KMI/PVM Programování v MATLABu

Objekty a strukturované datové typy

Datové struktury

bod.x = 0;
bod.y = 0;
bod = setfield(bod, 'x', 0);
x = getfield(bod, 'x');
x = bod.x;

% lze i pres promennou
polozka = 'x';
x = bod.(polozka);

% struktury jsou dvourozměrná pole, muzeme tedy provest
bod(2).x = 1;
bod = setfield(bod, {2}, 'x', 0);

% konstrukce struct
bod = struct('x',10,'y',5);
bod = struct('x',{10,11},'y',{5,6});

% smazani polozky
bod = rmfield(bod, 'x');
% pozor
bod = struct('x',{10,11},'y',{5,6});

>> sum(bod.x)
ans =
    10

>> sum([bod.x])
ans =
    21

% navic {} vytvori pole bunek
>> {bod.x}
ans =
    [10]    [11]

Objektové programování

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
% pouziti
b = bod(1, 1);
b = b.setBarva('#ffffff');
b = setBarva('#ffffff')
b.getBarva();
getBarva(b);
% velice zajimave
  properties(GetAccess = 'public', SetAccess = 'private')
      % public read access, but private write access.
  end
  properties(GetAccess = 'private', SetAccess = 'private')
      % private read and write access
  end
 properties(Constant = true)
      % constants
 end

Třídy je možné uložit do adresáře @class, kde class je nazev tridy. Metody lze zapisovat jako samostatne soubory. Slozka private pro soukromé metody.

% dedicnost
classdef classname < superclass

% vicenasobna dedicnost
classdef classname < super1 & super2 & super3

Obecné, třídy v Matlabu by měli implementovat běžné metody jako napřík display, metody pro indexování, přetypování a další.

Doporučená literatura na dnešní seminář

Úkoly

  1. Vytvořte třídu reprezentující graf (která má vlastnosti počet uzlů, počet hran a příslušné metody). Graf bude možné vytvořit z logické matice (představující matici sousednosti). Pro uzly grafu použijte struktury nebo třídy (volba je na Vás). Napište metodu pocet_komponent, která zjistí počet komponent v grafu. Pro testování použijte matici obsahující 11 uzlů a 4 komponenty..

  2. Vytvořte funkci pocet = pocet_komponent(M), která pro zadanou logickou matici M zjistí počet komponent. Při této implementaci nepoužívejte třídy ani datové struktury. Ověřte rychlost Vaší implementací (Úkol 1 a 2) pomocí metod tic() a toc().

© Martin Trnečka