Janusz Augustyński

21 kwi 20202 min

Obiektowość ogólna w technologii OUX / języku C+

Aktualizacja: 16 mar 2022

Moduły i pliki

Moduły podsystemu OUX to zbiór plików w podkatalogu katalogu module, np. base.

Pliki te mają nazwy zawartego w nich realizatora (sterownika lub menedżera obiektów), np. flow-drv.cx, mem-blk.cx, text.cx.

Pierwsza część nazwy określa moduł języka C+, który jest czymś mniejszym od modułu podsystemu OUX, a druga część nazwy – przeważnie obiekt tego modułu. W powyższych przykładach: moduły flow, mem i text oraz oznaczenie sterownika drv i obiektu blk. Na końcu jest rozszerzenie nazwy .cx oznaczające plik w języku C+.

Nazwy definicji języka C+

Został wymyślony ogólny format nazywania definicji języka C+, np. obiektów, zmiennych, procedur. Ma on następującą formę:

  1. wielka litera reprezentująca typ następującej nazwy

  2. znak podkreślenia

  3. nazwa definicji małymi literami

Na przykład:

E_mem

Takie formy są ze sobą sklejane kolejno rozdzielone znakiem podkreślenia, tworząc pełną nazwę w obiektowości ogólnej języka C+.

E_mem_Q_blk

Ponadto można też na końcu umieścić wielką literę reprezentującą typ bez nazwy, na przykład:

E_mem_Q_blk_M

Powyższy zapis oznacza moduł (E) mem, obiekt (Q) blk, utworzenie (M), więc procedura tak nazwana jest tzw. z innych języków programowania kreatorem obiektu blk (block) przynależnego do modułu mem (memory), czyli jest alokatorem pamięci.

Takie tworzenie nazw definicji nie ogranicza języka żadną wbudowaną hierarchią obiektów, a zawiera w sobie szybki do zrozumienia opis przeznaczenia.

Stąd wszystkie tak nazwane obiekty są definiowane w przestrzeni globalnej, natomiast wewnątrz procedury do definiowania zmiennych wystarczy używać samych nazw definicji.

Podstawowe definicje obiektów

Obiekty (oznaczone literą Q) mogą mieć procedurę tworzenia oznaczoną literą M, procedurę wyrzucenia – literą W, odczyt właściwości – literą R, zapis właściwości – literą P, definicję zmiennej – literą S, definicję typu zmiennej – literą Z, procedurę wytworzenia formy czegoś stratnie względem obiektu – literą N, procedurę innej funkcji – literą I. Na przykład:

Pc
 
E_mem_Q_blk_M( N l
 
){ //Procedura utworzenia bloku pamięci.
 
}
 
P
 
E_mem_Q_blk_M_tab(
 
N u
 
, N n
 
){ //Procedura utworzenia tablicy bloków pamięci.
 
}
 
void
 
E_mem_Q_blk_W( Pc p
 
){ //Procedura wyrzucenia bloku pamięci.
 
}
 
I
 
E_mem_Q_tab_R_n( struct E_mem_Q_tab_Z *tab
 
){ //Procedura odczytania liczby elementów tablicy.
 
}
 
P
 
E_mem_Q_tab_R( struct E_mem_Q_tab_Z *tab
 
, I id
 
){ //Procedura odczytania wskaźnika do elementu tablicy.
 
}
 
B
 
E_io_Q_stream_out_P( I id
 
, Pc s
 
, N l
 
){ //Procedura wypisania tekstu do strumienia wyjścia.
 
}
 
B
 
E_io_Q_stream_out_P_c( I id
 
, C c
 
){ //Procedura wypisania wartości C do strumienia wyjścia.
 
}
 
struct E_base_Z
 
{
 
} *E_base_S;
 
struct E_mem_Z_range
 
{
 
};
 
struct E_mem_Q_tab_Z
 
{
 
};
 
Pc
 
E_text_Z_n_N_s( Pc s_end
 
, N n
 
, N l
 
, N base
 
){ //Procedura przekształcenia wartości N na tekst.
 
}
 
P
 
E_mem_Q_blk_I_add( P p
 
, N n
 
, N *n_prepended
 
, N *n_appended
 
){ //Procedura powiększenia rozmiaru już przydzielonego bloku pamięci.
 
}

Jest również litera G do oznaczenia procedury wstępnego przepływu wykonania, na przykład do sprawdzenia, ile bajtów będzie potrzebne do wypisania liczby jako tekst:

N
 
E_text_Z_n_N_s_G( N n
 
, N l
 
, N base
 
){
 
}
 
Pc
 
E_text_Z_n_N_s( Pc s_end
 
, N n
 
, N l
 
, N base
 
){
 
}

Bardziej szczegółowy opis znajduje się na stronie Wiki projektu.

    640
    0