‟overcq”

Z bloga o OUX/C+

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

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.