Soru sorabilmek için 300 puana ulaşmanız gerekmektedir.
Sitemizi ilk defa ziyaret ediyorsun . Bizi onurlandırdın , umarım sana kaliteli bilgiler sunabiliriz.
0 oy
17 gösterim
Bilgisayar kategorisinde (8.5k puan) sordu

Interposer kelimesinin karşılığı aracı, aracılık yapan demektir. Yani başlık aslında "Aracı Sınıf Nedir" şeklinde de yazılabilirdi.

Bir Interposer Sınıfı, (hiyerarşik anlamda konuşacaksak) bir sınıfın (kendisinden türediği) bir ata sınıf ile bu sınıfın türüne ait bir nesnenin beyanı arasında konumlandırılış bir "Aracı sınıftır". Ana karakteristiği, ata sınıf ile aynı isme sahip olmasıdır. Bu sayede uygulamalarda ata sınıfın kullanıldığı durumlarda süreci basitleştirmek hedeflenmiştir. Bu teknik aslında 1998'den beri var ve Delphi ile yeteri kadar haşırneşir olanların çok sık kullandığı bir teknik diyebilirim.

Bazı arkadaşlar "Class Helper" tekniğine başvurmak isteyebilir ama hepimiz biliyoruz ki Sınıf Yardımcıları sadece yardım ettikleri sınıfın yerel değişkenleri ve property'leri üzerinde işlem yapabiliyor, asıl nesnenin private bölümündeki değişkenlere erişimde sıkıntı yaşatıyor, dolayısıyla bu noktada kullanışlı bir seçenek değiller...

Diğerleri de "TPAnel'den türetilmiş başka bir tip tanımlarız" diyebilir, yine de tüm formları tek tek gezmeniz ve ilgili eşleşmeleri tek tek düzeltmeniz gerekir. Yani sonuç olarak yine dönüp dolaşıp bu hamallık sekansına geri geliyoruz...

Bunun daha basit bir çözümü yok mu? Yani bu hamallıktan kurtulamayacak mıyız? Hamallıktan kurtuluş yok ama yükümüzü buzdolabı ölçeğinden, aspirin kutusu ölçeğine kadar küçültebiliriz...

İşte bunun gibi durumlarda sizden "YAPISAL OLARAK" mevcut bir şeyi değiştirmeniz isteniyorsa bu noktada devreye Interposer sınıflar giriyor. Peki bu Interposer Sınıf denen şey tam olarak nedir? Cevap basit: Aslında, sınıfın kendisini yine kendisinden türetmektir diye özetleyebiliriz.

Yukarıdaki senaryoyu ele alacak olursak yine o çerçevede bir örneklendirme yapalım.

Yapacağımız şey çok basit, projemizdeki tüm TPanel nesnelerinin sağ üst köşesine bir buton koyacağız ve bu butona basıldığında TPanel nesnesi kendisini imha edecek. Normalde böyle bir özellik TPanel nesnesinde yok ve bizden bu özellik projedeki tüm TPanel nesnelerinde olsun isteniyor...

Bunun için adı InterposerObjects adlı boş bir unit oluşturuyoruz ve içini aşağıdaki gibi dolduruyoruz. Açıklamalar ise kod içinde devam ediyor;

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

unit InterposerObjects;

interface

uses

    Vcl.StdCtrls    //  TButton

  , System.Classes  //  TComponent

  , Vcl.Controls    //  Anchors

  , Vcl.ExtCtrls    //  TPanel normalde bu unit'te tanımlıdır. Biz bu unitteki TPanel'e yeni bir özellik ekleyeceğiz aşağıda...

  ;

type

  TPanel = class(Vcl.ExtCtrls.TPanel)                             // Bu bizim INTERPOSER sınıfımız oluyor.

    private

      FButon: TButton;                                            // Gerçek sınıfta olmayan bir buton nesnemiz var

    protected

      procedure PaneliYokEt(Sender: TObject);                     // Yine Gerçek sınıfta olmayan bir olay tanımlıyoruz.

                                                                  // Bunun görevi paneli yok etmek olacak...

    public

      constructor Create(AOwner: TComponent); override;           // Butonumuzu bu noktada oluşturuyoruz...

      destructor Destroy; override;                               // Butonumuzu bu noktada yok ediyoruz...

  end;

implementation

uses

    System.SysUtils

  , Vcl.Dialogs

  ;

{ TPanel }

constructor TPanel.Create(AOwner: TComponent);

begin

  // Bu kısım inheritance / miras alma yoluyla klasik TPanel'de ne varsa onu zaten üretiyor.

  inherited Create(aOwner);

  // Bu noktadan sonrasında ise geliştirdiğimiz sınıfımızda yeni butonumuzu yerleşik olarak oluşturuyoruz

  FButon := TButton.Create(Self);

  with  FButon do begin

        Parent  := Self;

        Width   := 20;

        Height  := 20;

        Caption := 'xx';

        Top     := 0;

        Left    := Self.Width - 20;

        Anchors := [akTop, akRight];

        OnClick := PaneliYokEt;

  end;

end;

destructor TPanel.Destroy;

begin

  // Önce yeni butonumuzu yok ediyoruz

  FreeAndNil(FButon);

  // sonra yine miras yoluyla klasik yok etme prosedürünü çağırıyoruz...

  inherited Destroy;

end;

procedure TPanel.PaneliYokEt(Sender: TObject);

begin

  ShowMessage('INTERPOSER SINIF aracılığıyla böyle bir yetenek kazandırmış olduk...');

  Destroy; // ve TPANEL kendi kendini yok eder...

end;

end.


Bu noktadan sonra ise yapacağımız tek bir şey var. Bu uniti projedeki tüm pas dosyalarının INTERFACE bölümüne eklemek olacak. Yalnız burada dikkat etmemiz gereken bir nokta var o da şu, normalde TPanel "Vcl.ExtCtrls.pas" dosyasında tanımlıdır, biz ise kendi unitimizi bu unitten hemen sonra eklemeliyiz yoksa yaptıklarımız bir işe yaramaz.
 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

unit Ana_;

interface

uses

    Winapi.Windows, Winapi.Messages

  , System.SysUtils, System.Variants, System.Classes

  , Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs

  , Vcl.StdCtrls

  , Vcl.ExtCtrls             // TPanel normalde bu unit'te tanımlıdır...

  , InterposerObjects        // YAPMAMIZ GEREKEN İSE SADECE BU UNİTİ BURAYA EKLEMEKTİR...

  ;

type

  TForm2 = class(TForm)

    Panel1: TPanel;

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form2: TForm2;

implementation

{$R *.dfm}

end.


Tasarım ekranında görmeseniz bile projenizi çalıştırdığınızda gördüğünüz her TPanel nesnesinin sağ üst köşesinde bir kapatma butonuna sahip olduğunuzu göreceksiniz.

Bu soruya cevap vermek için lütfen giriş yapınız veya kayıt olunuz.

İlgili sorular

0 oy
0 cevap 1 gösterim
0 oy
1 cevap 25 gösterim
+1 oy
1 cevap 59 gösterim

155 soru

102 cevap

10 yorum

204 üye

acik-port aireplay-ng akinci-yazilimi all-of-domain-attack android-mantigi-nasil android-nasil-yazilir android-nedir android-yazilim api-nasil-alinir api-nedir aselsan-yazilim audit-guvenlik-denetim-araci bapi-kurulumu benzocaine bilgisayar-denetim-araci bilincalti-nedir blackhat-seo burpsuite-nedir-nasil-kullanilir busbar buy calistir-komutlari cmd-attrib cmd-delphi cmd-komutlari command-komutlari ddos-attack ddos-korunma decrypt delphi delphi-apk-muzik delphi-build delphi-clean delphi-community-edition-download delphi-copy delphi-database delphi-db delphi-deploy delphi-fmx delphi-image delphi-list delphi-mobile-slide delphi-music delphi-muzik-gomme-yerlestirme delphi-overflow delphi-uygulama-izinleri devaudit-nedir domain-saldiri dos-attack dos-attrib dos-korunma doscommand-delphi dress elektro-bomba elmastan-saglam-madde emb emp fake-numara fake-number fake-whatsapp firemonkey fmx godaddy-indirim godaddy-kupon godaddy-yenileme gunes-sistemi-tess hayvan-robotlar herve iha-yazilimi interposer-class-nedir-nasil-kullanilir kuzgun-yazilim leger lidocaine manyetik-bomba misir-robot nano-robotlar nasa-tess patlamis-misir-robotu port-kapatma pubg-ban pubg-ban-nasil-kaldirilir pubg-banned python-os-process-parameter seo-analizi seo-spam-nedir-kurtulma sha512-encrypt-sha512 sha512-çözme sha512-şifreleme siha-yazilimi sinergoloji-nedir sinyal-yansitici-boya-nedir-nerelerde-kullanilir-nerelerde-bulunur url-kısaltıcı-kullanımı uses-permissions-delphi uydu-tess wifi-card wifi-dos-attack wifi-kart-hazirlama wifi-saldiri wifi-saldiri-mantigi wifi-saldiri-ogrenme wordpress-path-acik-kapatma
3 Online
0 Member And 3 Guest
Today Visits : 66
Yesterday Visits : 2039
All Visits : 331227
...