İçeriğe atla

Dinamik iletim

Bilgisayar programlamada dinamik iletim, altyordam çağrılarının ilişkin altyordam başlangıç adresine dinamik olarak bağlanmasıdır. Bir diğer deyişle, dinamik iletim program metnindeki bir çağrı ile işletilen altyordamın programın çalışması sırasında birbirine bağlanması durumudur. Geri çağrı ve çokbiçimliliğin realize edilmesinde kullanılan bu bağlama yöntemi, yordamsal programlama dillerinde altyordam göstericileriyle gerçekleştirilirken, nesne yönelimli dillerde kalıtlama ve gerçekleştirme ilişkilerinin kullanılmasıyla otomatikman sağlanır. Altyordamların birinci sınıf dil öğesi olarak ele alındığı fonksiyonel programlama dillerinde ise, aynı işlevsellik altyordamların argüman olarak geçirilmesi ile sağlanabilir.

Dinamik İletim ve Diğer Kavramlar

Dinamik iletimin başlıca amacı, kullanıcının gereksinimlerine göre değişkenlik gösterebilecek kod parçalarının kullanıcı tarafından tamamlanmasını mümkün kılarak yazılım çerçevelerinin çokbiçimli kullanılabilmesini sağlamak ve böylece daha yüksek yeniden kullanım elde etmektir. Örnek olarak, görsel arayüzlü bir yazılımı kullanırken yaptıklarınızı düşünün, düğmelere basıyorsunuz, metin kutularını dolduruyorsunuz, listelerden seçimler yapıyorsunuz, vs. Ancak, düğmenin (ve diğer görsel öğelerin) davranışı temelde değişmediği halde, düğmeye basıldığında programın amacına dönük şeyler oluyor. Mesela, öğrenci kayıt formunun doldurulması sonrasında tıklanan Tamam düğmesi öğrenci kaydını yaparken, kitap alışverişi sitesindeki aynı görünüşlü düğmeyi tıklamanız kitapların evinize kadar gelmesini sağlayan bir sürecin başlamasına neden oluyor. Tıklamak eylemi aynıyken, olup biten değişiyor ve bunun görsel arayüz kitaplığını üreten firma tarafından bilinmesi olanaksız; resmin sizin kullandığınız yazılımı—öğrenci kayıt ve kitap alışveriş yazılımları—üretenler tarafından doldurulması gerekli. İşte bu, yordamsal programlama dillerinde altyordam göstericilerine uygun altyordamların adreslerini geçirerek sağlanırken, nesne yönelimli dillerde yazılım çerçevesince sağlanan üstsınıflardan kalıtlama veya arayüzleri gerçekleştirme ile sağlanabilir.

Üstsınıftan kalıtlama veya arayüz gerçekleştirme senaryosunun geçerli olduğu durumlarda, bir nesneye gönderilen ileti sonucunda hangi metodun çağrılacağını belirleyen aşağıdaki adımların akılda tutulması yararlı olacaktır.

  1. İletinin uygunluğu tutacak—gösterici veya referans da olabilir—türünün (statik tür) desteklediği iletilerle denetlenir. Derleme sırasında yapılan bu denetim, ileti ve metot imzalarının uyuşup uyuşmadığına bakar. Uyuşmanın olmaması durumunda, derleme hata mesajı vererek başarısız bir biçimde sona erecek ve bir sonraki adıma geçilmeyecektir.
  2. Tutacağın temsil ettiği nesnenin sınıfına (dinamik tür) bakarak hangi metodun çağrılacağına karar verilir. Bu karar, nesnenin sınıfında gerçekleştirilen veya üstsınıflardan kalıtlanan metotlardan biri seçilerek programın çalışması sırasında verilir.

Programlama Dilleri ve Dinamik İletim

C

Kabarcık sıralaması algoritmasının C programlama dilindeki soysal gerçekleştirimini içeren aşağıdaki kabarcik_siralama fonksiyonunun imzasında iki nokta dikkat çekiyor: fonksiyon göstericisi ve eleman türü olarak void* ile eşanlamlı ilan edilmiş olan Object. Bunlardan ilki dizinin eleman türüne ve/veya sıralama fonksiyonunun kullanılış bağlamına göre farklı biçimlerde sıralanmasını olanaklı kılarken, ikincisi dizinin herhangi bir türden eleman tutabilmesini—yani, dizinin soysal olmasını—sağlıyor.

Kabarcik.h
#ifndef KABARCIK_H
#define KABARCIK_H

typedef void* Object;
typedef int (*KARSILASTIRMA_FONK)(Object, Object);

extern void kabarcik_siralama(Object dizi[], int boy, KARSILASTIRMA_FONK kar_fonk);
#endif

Yukarıda sağlanan imzaya uygun gerçekleştirime göz atıldığında ise, işin püf noktasının fonksiyon göstericisinin kullanıldığı içteki döngünün ilk satırında olduğu görülür. Her ne kadar kar adındaki bir fonksiyonun çağrılması ile aynı görünse de, aslında bu satırda kar adlı fonksiyon göstericisinin sahip olduğu değerin işaret ettiği bellek konumunda başlayan bir fonksiyon çağrılmaktadır; kabarcik_siralama fonksiyonunun çağrıldığı noktalarda kar parametresine değişik değerlere sahip göstericilerin geçirilmesi, farklı karşılaştırma ölçütlerinin kullanılması ve dolayısıyla sıralamanın farklı türler ve/veya biçimlerde yapılması anlamına gelecektir.

Kabarcik.c
#include <stdio.h>
#include "Kabarcik.h"

#define BOOL char
#define FALSE 0
#define TRUE 1

static void takas_et(Object dz[], int sol_indis, int sag_indis) {
  Object gecici = dz[sol_indis];
  dz[sol_indis] = dz[sag_indis];
  dz[sag_indis] = gecici;
} /* void takas_et(Object[], int, int) sonu */

void kabarcik_siralama(Object dz[], int boy, KARSILASTIRMA_FONK kar) {
  int gecis, j;

  for(gecis = 1; gecis < boy; gecis++) {
    BOOL takas_var = FALSE;

    for (j = 0; j < boy - gecis; j++)
      if (kar(dz[j], dz[j + 1]) > 0) { 
        takas_et(dz, j, j + 1);
        takas_var = TRUE;
      } /* if sonu */
    if (!takas_var) return; 
  } /* for(gecis = 1; gecis < boy; gecis++) sonu */
} /* void kabarcik_siralama(Object[], int, KARSILASTIRMA_FONK) sonu */

Aşağıda sağlanan sınama programının incelenmesi olup bitenin daha iyi anlaşılmasını sağlayacaktır. kabarcik_siralama fonksiyonunun ilk kullanılışı Integer türlü elemanları olan bir diziyi karşılaştırma amacıyla int_kars fonksiyonundan yararlanarak sıralarken, ikinci kullanılış komut satırında geçirilen karakter katarı dizisini karşılaştırmak için karakter_katarı_kars fonksiyonundan yararlanarak sıralıyor.[1]

Kabarcik_Sinama.c
#include <stdio.h>
#include <string.h>
#include "Kabarcik.h"

typedef int* Integer;

void ksa_bas(char *ksa[], int boy) { ... }

void intleri_bas(Integer dz[], int boy) { ... }

int karakter_katar_kars(Object sol, Object sag) {
  return(strcmp((char*) sol, (char *) sag));
} /* int karakter_katar_kars(Object, Object) sonu */

int int_kars(Object sol, Object sag) {
  Integer ig1 = (Integer) sol;
  Integer ig2 = (Integer) sag;

  if (*ig1 > *ig2) return 1;
    else if (*ig1 < *ig2) return -1;
      else return 0;   
} /* int int_kars(Object, Object) sonu */

int main(int args, char *ksa[]) {
  int dizi[] = {1, 3, 102, 6, 34, 12, 35}, i;
  Integer int_dz[7];
  for (i = 0; i < 7; i++) int_dz[i] = &dizi[i];

  printf("\nTAMSAYI DIZISI SINANIYOR\n\nSiralama oncesi\n"); 
  intleri_bas(int_dz, 7); 
  kabarcik_siralama((Object*) int_dz, 7, &int_kars); 
  printf("\nSiralama sonrasi\n"); intleri_bas(int_dz, 7);
  
  printf("\nKARAKTER KATARI DIZISI SINANIYOR\n\nSiralama oncesi\n"); 
  ksa_bas(&ksa[1], args - 1);
  kabarcik_siralama((Object*) &ksa[1], args - 1, karakter_katari_kars);
  printf("Siralama sonrasi\n"); ksa_bas(&ksa[1], args - 1);

  return(0);
} /* int main(int, char **) sonu */

C++

C'nin nesne yönelimli ardılı olan C++'da dinamik iletim, fonksiyon göstericilerine ek olarak, üstsınıfta virtual ilan edilen bir fonksiyonun altsınıflarda ihtiyaca uygun bir biçimde gerçekleştirilmesi veya ezilmesi ile sağlanır. Varsayılan iletim biçiminin statik olması nedeniyle, söz konusu fonksiyonun virtual ilan edilmemesi dinamik iletimi ve dolayısıyla çokbiçimliliği engelleyecektir. Unutulmaması gereken bir diğer nokta, çokbiçimliliğin üstsınıf türünden bir gösterici veya referans—bir başka deyişle, derleyici tarafından özel bir biçimde ele alınan sabit gösterici—ile mümkün olduğudur. Bu, üstsınıf ve altsınıf nesnelerinin muhtemelen değişik büyüklüklerde olması, büyüklüğü çalışma anında belirlenebilen bellek bölgelerinin yığın bellekten ayrılması gerekliliği ve yığın belleğin ancak göstericiler ile işlenebilmesi nedeniyle zorunludur.

Memur.hxx
#ifndef MEMUR_HXX
#define MEMUR_HXX
class Memur {
...
public:
  virtual double aylik_gelir() = 0;
...
}; // Memur sinifinin sonu
#endif

İkinci aşamada yapılması gereken, dinamik iletimli çağrılacağı için virtual ilan edilmiş olan fonksiyonların altsınıflarda tanımlanmakta olan türlerin özelliklerini göz önünde bulundurarak gerçekleştirmektir.

GenelMudur.hxx
#ifndef GENELMUDUR_HXX
#define GENELMUDUR_HXX
#include "Memur.hxx"

class GenelMudur : public Memur { ... };
#endif
GenelMudur.c
#include "GenelMudur.hxx"
...
double GenelMudur::aylik_gelir() {
    // Geliri derece, kademe ve alınabilecek rüşveti hesaba katarak hesapla.
} // double GenelMudur::aylik_gelir() sonu
...
DuzMemur.hxx
#ifndef DUZMEMUR_HXX
#define DUZMEMUR_HXX
#include "Memur.hxx"

class DuzMemur : public Memur { ... };
#endif
DuzMemur.c
#include "DuzMemur.hxx"
...
double DuzMemur::aylik_gelir() {
  // Geliri derece ve kademeden yararlanarak hesapla.
} // double DuzMemur::aylik_gelir() sonu
...

Dinamik iletimli fonksiyonun çokbiçimli kullanımına bir örnek aşağıdaki kod parçasından görülebilir. Dikkat edilecek olursa, memurlar adındaki kabın eleman türü üstsınıfın referans türüne sahip tanımlanmış. Dolayısıyla, söz konusu kap Memur veya Memur gibi olan—yani, Memur'dan kalıtlayan—herhangi bir türden nesneyi gösteren referanslar tutacaktır.[2]

Bordro.cpp
#include <vector>
using namespace std;
#include "Memur.hxx"
#include "GenelMudur.hxx"
#include "DuzMemur.hxx"

int main(void) {
  vector<Memur&> memurlar;
  ...
  double toplam_odeme = 0;
  vector<Memur&>::const_iterator bas = memurlar.begin(), son = memurlar.end();
  while(bas != son) {
    toplam_odeme += (*bas).aylik_gelir();
    bas++;
  } // while (bas != son) sonu
  ...
} // int main(void) sonu

Java

Java'da, final ilan edilerek aksi söylenmedikçe, tüm metotlar dinamik iletimle çağrılır. Dolayısıyla, programcının fazladan bir şey yapmasına gerek yoktur.

Kalıtlama Yoluyla Çokbiçimlilik ve Dinamik İletim

Memur.java
public abstract class Memur {
  ...
  public double gelir();
  ...
} // Memur sınıfının sonu
GenelMüdür.java
public class GenelMüdür extends Memur {
  ...
  public double gelir() {
    // Geliri derece, kademe ve alınabilecek rüşveti hesaba katarak hesapla.
  }
  ...
} // GenelMüdür sınıfının sonu
DüzMemur.java
public class DüzMemur extends Memur {
  ...
  public double gelir() {
    // Geliri derece ve kademeden yararlanarak hesapla.
  }
  ...
} // DüzMemur sınıfının sonu

Kalıtlama yoluyla çokbiçimliliğin örneklendiği aşağıdaki kod parçasından da görülebileceği gibi, gönderilen ileti sonucunda çağrılan metot, tutacağın arkasındaki nesnenin türüne göre belirlenmektedir. Buna göre, for döngüsünün içindeki gelir iletisi, kimi zaman GenelMüdür kimi zamansa DüzMemur sınıfındaki aynı imzalı metodun çağrılmasına neden olacaktır.

Bordro.java
import java.util.Vector;

public class Bordro {
  Vector<Memur> çalışanlar = new Vector<Memur>();
  ...
  double toplamÖdeme = 0;
  for (Memur çalışan : çalışanlar)
    toplamÖdeme += çalışan.gelir();
  ...
} // Bordro sınıfının sonu

Gerçekleştirme Yoluyla Çokbiçimlilik ve Dinamik İletim

Java, türleri (sınıflar ve arayüzler) gibi olmak ilişkisine göre bir sıradüzenine koyan kalıtlama ilişkisinin yanı sıra sınıfları sahip oldukları ortak arayüzlere göre kategorize eden gerçekleştirme ilişkisini de sunar. Gerçekleştirme ilişkisi yoluyla dinamik iletimin kullanılması ve metotların çokbiçimli bir şekilde kullanılması, birbirleriyle benzer olsun veya olmasın, aynı kategoriye giren sınıfların ortak bir arayüzü gerçekleştirmesi ile mümkün olur.

Öğrenci.java
package öğrenciişleri;

public class Öğrenci implements Comparable<Öğrenci>{
  ...
  pubic int compareTo(Öğrenci sağ) { ... }
  ...
} // Öğrenci sınıfının sonu
Vatandaş.java
package gelirvergisi;

public class Vatandaş implements Comparable<Vatandaş>{
  ...
  public int compareTo(Vatandaş sağ) { ... }
  ...
} // Vatandaş sınıfının sonu
Algoritmalar.java
package algoritmalar;

import java.util.*;

public class Sıralamalar {
  ...
  public static <V extends Comparable<? extends V>> void kabarcık(List<V> kap) {
    if (kap.length <= 1) return;

    boolean takasVar = false;
    int geçiş = 1;
    do {
      takasVar = false;
      for (int j = 0; j < kap.length - geçiş; j++) {
        V oAnki = kap.get(j), sonraki = kap.get(j + 1);
        if (oAnki.compareTo(sonraki) > 0) {
          V geçici = oAnki;
          oAnki = sonraki;
          sonraki = geçici;
          takasVar = true;
        } // if (oAnki.compareTo(sonraki) > 0) sonu
      } // for (int j = 0; j < kap.length - geçiş; j++) sonu
    } while(++geçiş < kap.length && takasVar);
  } // <V extends Comparable<V>> void kabarcık(List<V>) sonu
  ...
} // Sıralamalar sınıfının sonu
AlgoritmaSınama.java
import gelirvergisi;
import öğrenciişleri;
import static algoritmalar.Sıralamalar;

public class AlgoritmaSınama {
  ...
  kabarcık(öğrenciler);
  ...
  kabarcık(vergiMükellefleri);
  ...
} // AlgoritmaSınama sınıfının sonu

Scheme

Fonksiyonel programlama dillerinden olan Scheme'de dinamik iletim, altyordamların birinci sınıf muamele görmesi nedeniyle oldukça kolay sağlanır. Altyordam türlerinin varlığı, altyordamların argüman olarak geçirilmesini ve altyordamlardan sonuç olarak döndürülmesini olanaklı kılar. Bunun sonucunda, çokbiçimli davranması beklenen altyordama değişik altyordamların geçirilmesi işimizi görecektir. Örneğin, aşağıdaki kabarcık sıralaması gerçekleştirimine ikinci argüman olarak > geçirilmesi ilk argümandaki sayı dizisinin artan sırada sıralanması sağlarken, string-< geçirilmesi ilk argümandaki karakter katarı dizisinin azalan sırada sıralanmasını sağlayacaktır.

(define (kabarcık-alg dz öncemi?)
  (define (eleman-takas dz i j)
    (let ([geçici (vector-ref dz i)])
      (vector-set! dz i (vector-ref dz j))
      (vector-set! dz j geçici)))
  (define (geçiş ub)
    (do ((i 0 (+ i 1)) (takas? #f)) 
      ((= i (- ub 1)) takas?)
      (when (öncemi? (vector-ref dz (+ i 1)) (vector-ref dz i))
        (eleman-takas dz i (+ i 1))
        (set! takas? #t))))
   
  (do ((j (vector-length dz) (- j 1)) 
       (takas? #t (geçiş j))) 
    ((or (not takas?) (= j 1)) dz)))

Notlar

  1. ^ Adres işlecinin (&) kullanımlardan birinde olup diğerinde olmaması sizi şaşırtmasın. Her iki durumda da geçirilen değer, söz konusu fonksiyonun başlangıç adresini işaret eden bir gösterici değeri olacaktır.
  2. ^ Gerçekleştirimi sağlanmayan dinamik iletimli bir fonksiyonunun bulunması, Memur sınıfını bir soyut sınıf (İngilizceabstract class) yapıyor. Dolayısıyla, kabımız içindeki referansların Memur nesnelerini göstermesi, soyut bir sınıfın nesneleri yaratılamayacağı için, söz konusu olmayacaktır.

Ayrıca bakınız

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">Tam sayı</span> sıfırın sağında bulunan sayılar büyükken solunda bulunan sayılar küçüktür

Tam sayılar, sayılar kümesinde yer alan sıfır (0), pozitif yönde yer alan doğal sayılar ve bunların negatif değerlerinden oluşan negatif sayılardan oluşan sayı kümesidir.

<span class="mw-page-title-main">Amerika Birleşik Devletleri</span> Kuzey Amerikada bulunan ülke

Amerika Birleşik Devletleri, yaygın olarak Birleşik Devletler veya Amerika olarak bilinir. Kuzey Amerika kıtasında, Kanada ve Meksika arasında bulunan, elli eyalet ve bir federal bölgeden oluşan, federal anayasal cumhuriyet ile yönetilen bir ülkedir. Dünya'nın, 9,8 milyon km2 yüz ölçümü ile karasal alan bakımından dördüncü, toplam alan bakımındansa üçüncü en büyük ülkesi ve 334 milyonu aşan nüfusu ile de en kalabalık üçüncü ülkesidir. Ülkenin başkenti, aynı zamanda federal bölgesi olan Washington, DC'dir. En kalabalık şehri ise New York'tur.

<span class="mw-page-title-main">JavaScript</span> programlama dili

JavaScript, HTML ve CSS ile birlikte World Wide Web'in temel teknolojilerinden biri olan programlama dilidir. Web sitelerinin %97'sinden fazlası, web sayfası hareketleri için istemci tarafında JavaScript kullanırlar ve kullanılan kodlar genellikle üçüncü taraf kitaplıkları içerir. Tüm büyük web tarayıcılarında, kaynak kodunu kullanıcıların cihazlarında yürütebilmek için özel bir JavaScript motoru bulunur.

<span class="mw-page-title-main">C++</span> bir programlama dili

C++, Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

<span class="mw-page-title-main">Java</span> açık kaynak kodlu, nesneye yönelik, zeminden bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen bir programlama dili

Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kaynak kodlu, nesneye yönelik, platform bağımsız, yüksek verimli, çok işlevli, yüksek seviye, hem yorumlanan hem de derlenen bir dildir.

Python, nesne yönelimli, yorumlamalı, birimsel (modüler) ve etkileşimli yüksek seviyeli bir programlama dilidir.

<span class="mw-page-title-main">Demokrasi</span> tüm bireylerin eşit haklara sahip olduğu yönetim biçimi

Demokrasi veya el erki, halkın yasaları müzakere etme ve yasal düzenlemelere karar verme yetkisine veya bunu yapmak için yönetim görevlilerini seçme yetkisine sahip olduğu bir yönetim biçimidir. Kimin "halk" kabul edildiği ve yetkinin insanlar arasında nasıl paylaşıldığı veya hangi yetkilerin verildiği konuları zaman içinde ve farklı ülkelerde farklı oranlarda değişiklik göstermiştir. Demokrasinin özellikleri arasında genellikle toplanma özgürlüğü, örgütlenme özgürlüğü, mülkiyet hakları, din özgürlüğü, ifade özgürlüğü, vatandaşlık, yönetilenlerin rızası, genel oy hakkı, özgürlük hakkından ve yaşam hakkından haksız yere mahrum bırakılmamak ve azınlık hakları yer alır. Türkçeye kelimesinden geçmiştir.

<span class="mw-page-title-main">PHP</span> bir programlama dili

PHP: Hypertext Preprocessor, internet için üretilmiş, sunucu taraflı, çok geniş kullanımlı, genel amaçlı, içerisine HTML gömülebilen betik ve programlama dilidir. İlk kez 1995 yılında Rasmus Lerdorf tarafından yaratılan PHP'nin geliştirilmesi bugün PHP topluluğu tarafından sürdürülmektedir. Ocak 2013 itibarıyla 244 milyondan fazla web sitesi PHP ile çalışırken 2.1 milyon web sunucusunda PHP kurulumu bulunmaktadır.

<span class="mw-page-title-main">Yıldız</span> nükleer füzyon ile karanlık uzayda etrafına ısı ve ışık saçan kozmik cisim, plazma küresi

Yıldız, ağırlıklı olarak hidrojen ve helyumdan oluşan, karanlık uzayda ışık saçan, gökyüzünde bir nokta olarak görünen plazma küresidir. Bir araya toplanan yıldızların oluşturduğu galaksiler, gözlemlenebilir evrenin hâkimidir. Dünya'dan çıplak gözle görülebilen yaklaşık 6 bin dolayında yıldız vardır. Dünya'ya en yakın yıldız, aynı zamanda Dünya üzerindeki yaşamın gerçekleşmesi için gerekli olan ısı ve ışığın kaynağı da olan Güneş'tir.

<span class="mw-page-title-main">Holokost</span> Adolf Hitler liderliğindeki Nazi Almanyasının azınlıklar, eşcinseller, esirler ve muhaliflere uyguladığı soykırım

Holokost, Yahudi Soykırımı veya HaŞoah, Nazi Almanyası döneminde 1941 ve 1945 yılları arasında, Adolf Hitler ve Heinrich Himmler'in liderliğindeki SS güçleri tarafından işgal edilen sınırlar içerisinde yaklaşık 6 milyon Yahudi'nin sistemli bir şekilde öldürüldükleri soykırımdır.

AJAX, İnternet sayfalarında JavaScript ve XMLHttpRequest kullanımı ile etkileşimli uygulamalar yaratan tekniğin adıdır.

<span class="mw-page-title-main">İklim değişikliği</span> Dünyanın ortalama sıcaklığındaki mevcut artış ve buna bağlı olarak hava modellerindeki büyük ölçekli değişimler

İklim değişikliği, küresel ısınmayı ve bunun Dünya'nın iklim sistemi üzerindeki etkilerini ifade eder.

Çokbiçimlilik, bir türün bir başka tür gibi davranabilme ve bu tür gibi kullanılabilme özelliğidir. Nesne yönelimli programlama dillerinde çokbiçimlilik özelliği ise aynı temel sınıftan türetilmiş olan sınıflarda paylaşılan, başka bir ifadeyle aşırı yüklenen aynı metodun bu sınıflarda farklı şekillerde uyarlanabilmesidir. Nesnenin davranışı çalışma anında belirlendiği için programcılar, çokbiçimlilik özelliği sayesinde nesnelerin türünü önceden bilmek zorunda kalmaz.

<span class="mw-page-title-main">Sınıf (programlama)</span> nesne yönelimli programlamada, bir nesnenin nasıl çalıştığını belirten bir tanım

Sınıf, nesne yönelimli programlama dillerinde nesnelerin özelliklerini, davranışlarını ve başlangıç durumlarını tanımlamak için kullanılan şablonlara verilen addır. Bir sınıftan türetilmiş bir nesne ise o sınıfın örneği olarak tanımlanır. Sınıflar genelde şahıs, yer ya da bir nesnenin ismini temsil ederler. Sınıflar metotları ile nesnelerin davranışlarını, değişkenleri ile ise nesnelerin durumlarını kapsül ederler. Sınıflar hem veri yapısına hem de bir ara yüze sahiptirler. Sınıflar ile nasıl etkileşime girileceği bu ara yüzler sayesinde sağlanır. Örneğin bir sınıf şablonu ile renk özelliğine, tekerleklere ve sür metoduna sahip olan bir araba temsil edebilir.

Nesne yönelimli programlama dillerinde arayüz, değişik sınıflardan nesnelerin kategorize edilmesini sağlayan bir soyut tür çeşitidir. Tanımlanmakta olan kategorinin birbirleriyle alakasız sınıfları ortak bir çatı altında toplaması nedeniyle, arayüz tanımları, soyut sınıfların aksine, listeledikleri iletilerin gerçekleştirim ayrıntısı olan herhangi bir bilgi içeremezler. Dolayısıyla, bir arayüz tanımı iletilere karşılık gelen bir altyordam gövdesi veya altalan tanımı içeremez. Bir başka açıdan bakarsak, arayüz tanımında yer alan programlama öğelerinin zaman içinde değişme olasılığı düşük öğeler olması gerekir. Buna göre, arayüz tanımları gerçekleştirimci ile kullanıcının paylaştığı ve sabit olma özelliği bulunan altyordam imzaları ile simgesel sabit tanımlarını barındırabilir.

<span class="mw-page-title-main">MATLAB</span>

MATLAB, çok paradigmalı sayısal hesaplama yazılımı ve dördüncü nesil programlama dilidir. Özel mülk bir programlama dili olan MATLAB, MathWorks tarafından geliştirilmektedir. MATLAB kullanıcıya, matris işleme, fonksiyon ve veri çizme, algoritma uygulama, kullanıcı arayüzü oluşturma, C, C++, Java ve Fortran gibi diğer dillerde yazılmış programlarla arabağlama imkânı tanır.

<span class="mw-page-title-main">OpenMP</span>

OpenMP; Solaris, IBM AIX, HP-UX, GNU/Linux, MAC OS X ve Windows işletim sistemleri üzerinde çoğu işlemci mimarisi üzerinde Fortran, C++, C programlama dillerinde çoklu platform paylaşımlı bellek çoklu işlemeyi destekleyen bir uygulama geliştirme arayüzüdür, yani bir API'dir. OpenMP derleyici yönergelerinin kütüphane rutinlerini ve ortam değişkenlerinin çalışma zamanı davranışını etkileyen bir kümesini içerir.

Dart, ilk kez Google tarafından geliştirilen ve daha sonraları ECMA tarafından standart (ECMA-408) haline getirilen açık kaynaklı ve genel-amaçlı bir programlama dilidir. Dart dili kullanılarak web, sunucu, mobil uygulamalar ve IoT cihazları geliştirilebilir.

<span class="mw-page-title-main">U-kanunu algoritması</span>

μ-kanunu algoritması, öncelikle Kuzey Amerika ve Japonya'daki 8 bitlik PCM dijital telekomünikasyon sistemlerinde kullanılan bir sıkıştırma algoritmasıdır. ITU-T'nin G.711 standardında yer alan iki sıkıştırma algoritmasından biridir, zaten diğeri ise benzer A kanunudur. A-kanunu, Avrupa gibi dijital telekomünikasyon sinyallerinin E-1 devreleri üzerinde taşındığı bölgelerde kullanılmaktadır.

C23, C programlama dilinin açık standard taslağıdır ve ISO/IEC 9899:2024 olarak yayınlanması ve C17'nin yerini alması beklenmektedir. 2016'da gayriresmi olarak C2x ve adıyla üzerinde çalışılmaya başlanmıştır ve Ekim 2024'te yayınlanması beklenmektedir. C23'ün en son taslağı 1 Nisan 2023'te yayınlanmıştır ve genel erişime açıktır. WG14 C2x taslağı için ilk olarak Ekim 2019 toplanmış, 2020'te COVID-19 pandemisi nedeniyle toplantılar sanal olarak uzaktan yapılmış, sonrasında telekonferans toplantıları 2024 boyunca devam etmiştir. Haziran 2024'teki açık standardta 'C23'ün bitiminden sonra, "C2y" olarak adlandırıldığı' belirtilmiştir.