# Fiko OOP Mimarisi — Blueprint

fikatia-local'in `Fiko`-prefixli OOP + kalıtım + yetenek(mixin) mimarisi. Bu doküman
tasarımı + **genişletme desenlerini** yakalar (yeni Fiko sınıfı/panel/palet-kaynağı/
yetenek eklerken bu kalıpları izle → tutarlı, redundant olmayan büyüme).

> İlke: **"her şey Fiko sınıf" AMA sınıflar köprü** — kimlik + veri referansı tutar,
> her nokta için ayrı heap nesnesi YOK. Ham vertex/mesh verisi ECS/Dugum düz tamponda
> kalır → 60 FPS korunur. Mevcut motor (Cekirdek/Sahne/DokumanNesnesi/ECS) DEĞİŞMEZ;
> Fiko katmanı onların ÜSTÜNE oturur (duplicate etme, köprüle).

## 5 Katman

| Katman | Ne | Nerede |
|--------|-----|--------|
| 1. Yetenek (mixin) | FikoSecilebilir/Tiklanabilir/HoverEdilebilir/Suruklenebilir | `cekirdek/yetenek.hpp` |
| 2. Köprü base | FikoNesne (etkileşimli sahne nesnesi köprüsü) | `cekirdek/fiko_nesne.hpp` |
| 3. Somut sınıf | FikoDatumNokta/Eksen/Duzlem... | `cekirdek/fiko_datum.hpp` |
| 4. Sistem | fiko_etkilesim (tip-bağımsız dağıtıcı), FikoSistemTaban<T> | `cekirdek/fiko_etkilesim.hpp`, `fiko_sistem_taban.hpp` |
| 5. Veri/performans | ECS (Dunya/Depo) + Mesh tampon (MEVCUT) | `cekirdek/dunya.hpp`, `sahne/` |

App katmanı: FikoBelgePenceresi (pencere=sınıf), FikoPanel (panel=sınıf), FikoUniversalArama
(palet), FikoKisayolKaydi (kısayol), FikoSonDosyalar (recent).

## Yetenek modeli (KİLİT)

Küçük tek-sorumluluk arayüzleri; sınıflar `extend` ile karıştırır (çoklu kalıtım = mixin):
```cpp
class FikoNokta : public FikoNesne, public FikoSecilebilir, public FikoTiklanabilir {...};
```
Etkileşim sistemleri TİP BİLMEZ — `dynamic_cast` ile yeteneği olan her şeye çalışır
(3B yüz de UI buton da AYNI yol). Merkezi dağıtıcı: `fiko_etkilesim::hepsiniSec/surukle/
tikla/hover/secilenler`.

### Yeni YETENEK ekle
1. `yetenek.hpp`'ye `struct FikoXEdilebilir { virtual ~...=default; virtual void x()=0; };`
2. `fiko_etkilesim.hpp`'ye dağıtıcı: `int/bool xYap(nesneler..., ...)` (dynamic_cast döngüsü).
3. Test: yeteneği olan/olmayan nesneyle polimorfik dispatch (test_fiko_etkilesim kalıbı).

## Genişletme desenleri

### Yeni SOMUT sahne nesnesi (FikoDatum* kalıbı)
`class FikoX : public FikoNesne, public <yetenekler> { const char* turAdi() override; ... };`
Konum/veri üye; yetenek metodları veriyi köprüler (ham mesh ECS'te). Test: turAdi + yetenek
+ tip-bağımsız dispatch. (`fiko_datum.hpp` + test_fiko_datum.cpp örnek.)

### Yeni PANEL (FikoPanel kalıbı — uygulama/fikocad/fiko_panel.hpp)
`class FikoXPanel : public FikoPanel { void ciz(UygulamaBaglam& b) override { xCiz(b); }
const char* baslik() override; bool aktif(const UygulamaBaglam&) override; };`
GÖVDE TAŞIMA — mevcut `*Ciz()` fonksiyonunu SAR (davranış birebir). `kur()`'da
`panelYon_.ekle(make_unique<FikoXPanel>())`; kareCiz `panelYon_.cizTumu(bglm)` zaten çağırır.
Ad-hoc parametreli panel → ctor-ref deseni (ref'leri wrapper üyesi yap, kur()'da bağla).

### Yeni PALET KAYNAĞI (universal "her şeyi ara")
`komut_paleti.cpp universalKaynaklariKur`'a `arama.kaynakEkle(FikoAramaKaynagi{"X",
[&]{ vector<FikoAramaOgesi> o; ...; return o; }})`. Öğe: {ad, kategori, calistir}.
Kaynak callback CANLI (her aramada çağrılır → güncel). Mevcut Komut/Nesne/Dosya/Workbench
kaynakları BİREBİR korunur. `bulanikSkor` sıralar.

### Yeni SİSTEM (feature-CRUD) → FikoSistemTaban<T>
`class XSistemi : public FikoSistemTaban<XFeature> { void yenidenInsa(XFeature&) override;
void iptalOncesi(XFeature&) override; };` Ortak baslat/guncelle/onayla/sil base'de.
Public API korunmalı (çağıranlar değişmesin).

## Mimari İlke: makro + plugin + olay
Her yeni sistem doğduğu an makro+plugin+olay erişilebilir olmalı ([[fikatia-mimari-ilke-makro-plugin-olay]]).
Yeni olay struct'ı `OlayTuru` enum'ının SONUNA. (Fiko sistemlerinin olay/Lua erişimi bekleyen iş.)

## Build/Test konvansiyonu
- Build: `powershell -File insa.ps1 -Yapi Release` (main.cpp değişikliği unit-test'siz → sadece derle).
- Yeni test dosyası → CMakeLists'e ekle + `insa.ps1` (tam reconfigure; `cmake --build --target` yeni dosya ALMAZ).
- İzole modül testi (ajan main.cpp'de iken): `vcvars64.bat && cmake --build insa/Release --target fiko_<mod>_test`.
- Test kalıbı: `FIKO_TEST(ad){ FIKO_KONTROL(...); }`; kesin-değer + polimorfik-dispatch testleri.
- İsim: sınıf `Fiko`+Türkçe/İng, metod Türkçe. Davranış-koruma refactor'da member-alias trick (gövde birebir).

## Teslim durumu
OOP çekirdek (Dalga 0/1/2/4) + kolaylıklar (FikoKisayol/FikoSonDosyalar) + universal palet
(4 kaynak) TAM, build yeşil, 26/26 süit. Kalan: canlı capability→scene entegrasyonu (görsel
test gerek), performans (profiling gerek), görsel UI polish (kullanıcı yargısı). Detay +
sonraki-faz: [[fikatia-oop-mimari-operasyonu]] memory.
