Nesnelerin Özü, Ortak Kavramlar ve Terminoloji

Alan Snyder, Yazılım ve Sistemler Laboratuvarı HPL-91–50 Haziran, 1991 Çeviri: Midori Koçak — mtkocak (at) gmail (dot) com 25.12.2016


Anahtar kelimeler: Nesneler, nesne-yönelimli-programlama, nesne-yönelimli-veritabanları, nesne-yönelimli kullanıcı arayüzleri, dağıtık sistemler, terminoloji

İlk başta nesne-yönelimli programlama dilleri için geliştirilmiş olan kavramlar birçok farklı alanda da gözümüze çarpıyorlar. Bunlar, nesne-yönelimli veritabanları, nesne-yönelimli uygulama ve birleşik platformlar, ve hatta nesne-yönelimli kullanıcı arayüzleridir. Nesne kavramları, dağıtık sistemlerde genişçe kullanıldılar ve açık sistemlerin yönetimi için olan taslak ISO Standartlarında belirgindirler. İnanıyoruz ki, “Nesne” kavramlarını gözden geçirirken, bu gibi sistemlerin çoğunda veya tamamında ortaya çıkan önemli kavramları da tanımlamış oluyoruz.

Ortak bi terminolojinin olmaması yüzünden ortak kavramları tanımlamak daha da zorlaşıyor. Ortak terminolojinin olmaması, araştırmacılar, geliştiriciler ve kullanıcılar arasındaki iletişime de engel olmakta. Bu raporda, sadece programlama dilleri için değil, bir çok alanda genişçe uygulanabilmesi için seçilmiş nesne kavramları için ortak bir terminoloji önermekteyiz. Önemli kavramları tanımlayacak, örneklere verecek ve anahtar terimleri belirleyen bir sözlük de sunacağız.

1. Giriş

Asıl olarak nesne-yönelimli programlama dilleri için geliştirilmiş kavramlar, birçok farklı alanda da ortaya çıkmaktadılar. Bunlar, nesne-yönelimli veritabanları, nesne-yönelimli uygulama çerçeveleri ve birleşik platformlar ve hatta nesne-yönelimli kullanıcı arayüzleridir. Nesne kavramları, dağıtık sistemlerde genişçe kullanıldılar ve açık sistemlerin yönetimi için olan taslak ISO Standartlarında belirgindirler.

Bu alanlar neyin nesne nesne-yönelimli olup olmadığını gösteren ortak bir kavramı paylaşıyorlar mı? İnanıyoruz ki, “Nesne” kavramlarını gözden geçirirken, bu gibi sistemlerin çoğunda veya tamamında ortaya çıkan önemli kavramları da tanımlamış oluyoruz.

Bu kavramları, bir sizi açıklayıcı cümleyi içeren tabloyla göstereceğiz. Her açıklama, çeşitli alanlardan gelen örneklerle gösterildiler. Örnekler, Smalltalk, C++ ve Common Lisp Nesne Sistemi (programlama dilleri), HP Yeni Dalga Ortamı (kişisel bilgi işlem için bir uygulama entegrasyonu ortamı), Xerox ViewPoint (Ofis İş İstasyonu), HP SoftBench uygulama geliştirme ortamı (yazılım geliştirme araçları için entegrasyon çerçevesi), Iris (veritabanı sistemi), Symbolic Dynamic Windows (kullanıcı arayüzü) ve açık sistemlerin yönetimi için uluslarası ISO taslak standardını kaynak alıyorlar. Bu sistemler az ya da çok nesne-yönelimli olarak ifade edilen sistemlerdir.

Anlatmaya yardımcı olmak için, bu sistemlerin olası faydalarını, nesne-yönelimli olmayan çözüm örnekleriyle karşılaştıran örnekler vereceğiz. Burada amacımız, nesne-yönelimli yaklaşımın değerini anlatmak değil, onu açıklamaktır. Dengeli bir değerlendirme için gereken karşı argümanları geçiyoruz. Okuyucu, alternatif yaklaşımların avantajlarının olmadığını düşünmemelidir.

Ortak bi terminolojinin olmaması yüzünden ortak kavramları tanımlamak daha da zorlaşıyor. Birbirinden farklı bir çok ekolün, nesne kavramlarını kullanması bu problemi şiddetlendirmekte. Yine de, programlama dilleri topluluğunu bir kenara bıraktığımızda dahi, bir çok farklı terim aynı kavramı, ve bazı durumlarda da, aynı terim farklı kavramları açıklamak için kullanılabilmekte. Ortak terminolojinin olmaması, araştırmacılar, geliştiriciler ve kullanıcılar arasındaki iletişime de engel olmakta.

Bu raporsa, nesne kavramları için ortak bir terminoloji önermekteyiz. Terminoloji, sadece programlama dillerine değil, aynı zamanda farklı alanlara da uygulanabilmeleri için özellikle seçilmiştir. Bu nedenle, nesne-yönelimli programlamadan kaynaklanan birtakım yerleşik terimler de uygunsuz sayılmaktalar. Önemli kavramların açıklanması, anahtar terimleri açıklayan sözlükte yeralmakta.

Bu çalışma, Hewlett-Packard içinde kurumsal iletişimi geliştirmek amacıyla nesne kavramları için ortak terminoloji yaratma çabasından ortaya çıktı. En önce ilgili teknolojileri karşılaştırmak ve karakterize etmek için temel olacak çekirdek kavramları tanımladık ve açıkladık. Kavramlı tanımladıktan hemen sonra, bu kavramlar için terimleri seçtik. Çalışma, Obje Yönetim Grubu (Object Management Group) için soyut bir nesne modeli geliştirilmesi sürecinde rafine edildi ve hali hazırda ANSI tarafından sponsor olunan, nesne modellerini standartlaştırma çabalarında da kullanılmaktadır.

Önemli Kavramlar

  • Bir nesne hizmetler tarafından karakterize edilen bir soyutlamanın vücut bulma halidir.
  • İstemci, nesnelerden hizmetler talep eder. a) İstemciler talep bildirirler. b)Nesneler kapsüllenmişlerdir. c) Talepler işlem belirtirler. d) Talepler nesneleri tanımlayabilirler.
  • Yeni nesneler yaratılabilirler.
  • İşlemler jenerik olabilirler.
  • Nesneler sundukları hizmetlere göre sınıflandırılabilirler (arayüz hiyerarşisi)
  • Nesneler, uygulanımları (implementation) paylaşabilirler. a) Nesneler ortak bir uygulanımı paylaşabilirler. (bir çok örnek) b) Nesneler kısmı uygulanımları paylaşabilirler. (uygulanım hiyerarşisi veya delegasyon)

2. Başlıca Kavramlar

Bu bölümde bir nesne sisteminin başlıca kavramları tanımlanmaktadır. Bir nesne sistemi, nesne adı verilen, istemcilere hizmet sunulmasında önemli sol oynayan varlıklara sahiptir. İstemcilerin ve hizmetlerin kesin doğası belirlenmiş nesne sistemine bağlıdır. Genel olarak, bir istemci, bir kişi ya da program olabilir ve bir hizmet istemcinin talebine bağlı olarak gerçekleştirilen herhangi bir aktivite olabilir. Başlıca kavramlar nesne sistemlerinin ortak karakteristiklerini belirlerler. (Wegner ve Thomas tarafından yazılan makaleler, benze materyalleri daha öğretici tarzda sunuyorlar)

Bir nesne hizmetler tarafından karakterize edilen bir soyutlamanın vücut bulma halidir.

Bir nesne bir soyutlamanın vücut bulma halidir.

Bir nesne, açıkça istemcileri için anlamlı olan bir soyutlamanın vücut bulmuş halidir. Bir nesne verilerle ilgili olsa da, sadece bir veri yapısı veya 0,1’ler koleksiyonu değildir. Verinin amacı, bilgiyi sunmaktır.

Yarar: İstemciler anlamlı varlıkları manipule ederler. İstemciler veriyi sunmak ya da yorumlamaktan sorumlu değildirler.

Tezat: Nesne içermeyen bir model, verilerin sadece bir bit dizisi olduğu, bit okuyan veya yazan programlar tarafından örtük olarak yorumlanmayla sınırlı olduğu ve farklı programların farklı yorumlamalar yaptığı bir sistemdir. Bu modelde, müşterilerin verilerin nasıl yorumlanacağını bilmeleri gerekir. Ayrıca, veriler yanlış programa verildiğinde, yanlış yorumlanabilir.

Örnek: Dokümanlar, dizinler ve grafikler gibi aşina olunan soyutlamalara denk gelen nesneler, ViewPoint ve HP NewWave ortamının kullanıcılarına sunulmaktadır.

Örnek: Smalltalk programcıları, diziler ve sözlükler gibi aşina oldukları programlama soyutlamalarını destekleyen nesnelere sahiptirler.

Karşıt örnek: Unix içerisinde, sıradan bir dosya, yorumlanmamış bir byte dizisidir. Dosyanın yorumlanması uygulama programlarına bırakılmıştır. Aynı dosya bir C derleyicisi tarafından C kaynak kodu olarak algılanabilir ya da grep (bir metin arama aracı) programı tarafından uzun bir metin dizisi olarak algılanabilir. Farklı dosyaları anlamlı soyutlamalarla ilişkilendirmek için Dosya isimlenddrme kuralları gibi (örneğin foo.c adlı bir dosyanın C kaynak kodu anlamına gelmesi gibi) farklı teknikler kullanılır.

Ayrıntılandırma: Soyutlamalar bir hiyerarşi oluşturarak bir sistemin her düzeyinde ortaya çıkar: daha üst düzey soyutlamalar, daha alt düzey soyutlama terimleriyle uygulanmaktadırlar. Bir dosya, kalıcı bir depolama için bir soyutlamadır ve gerçek depolama cihazlarından daha yüksek seviyededir. Ancak birçok dosya, örtük olarak daha yüksek seviye bir soyutlama uygulamaktadır. Bir C programı eya bir doküman gibi. Çoğu Unix kullanıcısı için anlamlı olan bu üst düzey soyutlamalardır.

Bir nesne hizmet sağlayıcısıdır

Nesne tarafından gerçeğe dönüştürülen bir soyutlama, istemciler tarafından talep edilebilen bir hizmetler kümesi tarafından karakterize edilir. Bir hizmet, veriye erişebilir ya da onu değiştirebilir, ve gözlemlenebilir etikleri ortaya çıkarabilir. Hizmet tarafından değiştirilebilen veriye durum (state) denir.

Ayrıntılandırma: Hizmetler somutlaştırılmış soyutlama için uygundur. Hizmetler genellikle karmaşıktırlar; veriler üzerinde keyfi değişikler içerebilir ve diğer nesneleri etkileyecek ek hizmetler talep edebilirler. Sadece adlandırılmış öz niteliklerden oluşan, okunabilen ve yazılabilen bir kayıt, hizmetleri basit okuma ve yazma işlemleri olan ve durum olarak öz niteliklere sahip olan basit bir nesne formudur. Durum (state) belli nesnelerle alakalı veya alakasız olabilir veya farklı nesneler tarafından paylaşılıyor olabilir.

Yarar: Karmaşık sistemler tümleşik kısıtlamaları korumak adına özenle tasarlanmış olabilirler. Eğer sadece ilkel hizmetler sunuluyorsa, istemciler kendiliğinden bu hizmetleri daha karışık hizmetlerde bütünleştirmek zorunda kalabilirler ve bu da muhtemel hatalara sebep olabilir.

Örnek: Bir sözlük nesnesi, istemci için isimden değer döndüren bir hizmet sunar. Bu hizmetin uygulanması, sıralı ikili ağaç gibi karmaşık bir veri yapısının inşa edilmesini ve değiştirilmesini gerektirebilir. Altta yatan veri yapısının hatalı bir şekilde değiştirilmesi, ikili ağacın hatalı sıralanmasına ve sözlük hizmetlerinin hatalı davranmasına sebep olabilir.

Örnek: Dağıtık bir ortamda bir yazdırma kuyruğu nesnesi, birden fazla kullanıcının metin dosyalarının yazdırma kuyruğuna ataması hizmetini sunar. Bu hizmet, herhangi bir müdahele olmadan taleplerin eşzamanlı olarak sunulabildiği bir işlem mekanizması kullanılarak uygulanabilir. Eğer uygulamalar sadece düşük seviye okuma ve yazma işlemleri sunuyorlarsa, müdahele edilmemeyi garanti etmek adına bu düşük seviye hizmetlerin sıralı olarak birleştirilmesi gerekebilir. Bu durumda, yazdırma kuyruğu güvenirliği garanti edemez çünkü eşzamanlı taleplerin doğru işlenmesi, ayrı ayrı uygulamaların doğruluklarına bağımlıdır.

Karşıt örnek: Standart Unix Posta Teslimat hizmeti, kullanıcının posta kutusu dosyasına belirli bir protokolü izleyerek erişen uygulamalara dayalıdır. Bu protokol, bir kilit dosyası yaratmayı ve test etmeyi gerektiren belirli ve sıralı adımlara ihtiyaç duyar. Eğer bir uygulama, yeni bir postayı, posta kutusu doyasından çıkarırken bu protokolü izlemede hata yaparsa, eş zamanlı iletilen mesajlar kaybolabilir veya bozulabilirler.

İstemciler nesnelerden hizmetler talep ederler.

İstemciler talep bildirirler.

İstemciler nesnede vücut bulmuş soyutlamaya saygı duyarlar. Veriye direkt olarak erişmek yerine, istemciler nesnelerle ilişkili hizmetlere taleplerini bildirirler. Bir talep, talep edilen hizmeti gerçekleştirecek kodun çalışmasını sağlar. İstemci, kodun nerede ve nasıl çalıştığı ile değil, sadece istediği hizmetin çalışmasıyla ilgilidir. Bir talebin davranışı, istenen ve gerçekleştirilen hizmetin görünür etkisidir. (sonuçları ile beraber)

Yarar: İstemciler bir hizmetin gerçekleşmesi için hangi kodun çalışması gerektiğini hatırlamak zorunda değildirler. İstemciler hatayla yanlış kodu çalıştıramazlar.

Örnek: ViewPoint ve HP NewWave kullanıcıları belirli bir nesneyi değiştirmek için hangi uyuglamanın çalışması gerektiğini hatılamak zorunda değildirler; sistem uygun uygulamayu, kullanıcı taleplerine cevap olarak çağıracaktır. (örneğin, bir ikona yönelen fare harekerleri ile tetiklenmiş olabilirler)

Örnek: Bir Smalltalk programı, bir nesneye mesaj göndererek hizmet talebinde bulunur. Nesne, istenen hizmetin nasıl gerçekleşeceğinden sorumludur. Smalltalk içindeki tek tür hatası, istenen hizmetin mevcut olmamasıdır. Yanlış veriye kod uygulanamaz.

Yarar: İstemcileri, nesnenin uygulanmasından izole ederek, nesnenin uygulanmasını, istemciyi değiştirmeye gerek kalmadan değiştirmek mümkündür.(Hizmetlerin, istemcilere değişmez göründüğü varsayılır)

Örnek: Nesne-yönelimli programlamayı kullanan bir programcı, sözlük nesnelerini uygulamak için, bir çok durumda, dramatik olarak performansı iyileştiren yeni bir teknik keşfeder. Bu teknik, sıralı bir ikili ağaç yerine, hash tablosu kullanmaktadır. Sözlük nesnesinin yeni uygulanımı, veri formatı ve hizmetlerin uygulanımı farklı olsa da, eskisinin aynısı hizmetleri aynı şekilde sunmaktadır. Yeni sözlük uygulanımı, yeni nesne kütüphanesi yayınlandığında eskisinin yerini alır. İstemci kaynak kodunun değişmesine veya yeniden derlenmesine gerek yoktur.

Örnek: Bir HP SoftBench yazılım geliştirme ortamı kullanıcısı, standart SoftBench düzenleyicisi yerine GNU Emacs düzenleyicisi kullanmaya karar verir. GNU Emacs düzenleyicisi, SoftBench düzenleyicisi gibi (diğer uygulamalar için) aynı hizmetleri desteklediği için, düzenleyici hizmetine talep eden diğer uygulamalar, GNU Emacs düzenleyicisini kullanarak çalışmaya devam edeceklerdir.

Örnek: HP SoftBench ortamına, dış bir araç, HP Encapsulator programı, istemci taleplerini karşılayacak olan araç için sarmalayıcı yaratılarak, gömülebilir.

Örnek: Dış bir veritabanına, Iris veritabanına, istemcilerden gelen talepleri, uygun dış veritabanı çağrılarına dönüştüren dış işlevlerin sağlanmasıyla erişilebilir. (Iris içindeki dış işlev, konvansiyonel bir programlama dili kullanılarak yazılmış bir programdır.)

Nesneler Kapsüllenmişlerdir.

Bir istemci, nesnelere sadece hizmet talepleri göndererek erişebilir. İstemcilerin, nesnelerle bağlantılı olan verilere erişmeleri ve değiştirmeleri engellenir.

Yarar: Verilerle direk ilişkiye geçilmesini engelleyerek nesnelerin birtakım tümleşik kısıtlamalara uymaları garanti edilmektedir. Ayrıca istemcilerin de nesnelerin uygulanımlarından etkilenmemeleri de garanti edilmektedir.

Örnek: Smalltak ve C++ gibi nesne-yönelimli programlama dillerinde, bir istemcinin, bir nesnenin anlık özel değişkenlerine (private instance variable) doğrudan erişeleri, normal kullanımda engellenmektedir. (Ancak iki dilde de olağandışı durumlarda bu kısıtlamaların etrafından dolaşmayı sağlayan birtakım yapılar mevcuttur)

Talepler, işlemleri tanımlarlar.

Bir talep, bir hizmetin gerçekleştirilmesini, bir işlem tanımlayarak işaret eder. Bir işlem, bir hizmet belirten ve tanımlanabilen bir varlıktır.

Örnek: HP NewWave masaüstü, kullanıcının bir takım yollarla, örneğin, -menü öğelerini seçmek ya da ikonları çöp kutusuna ya da yazıcı ikonun sürükleyip bırakmak gibi- işlemleri tanımlamasına izin verir.

Örnek: C++ dilinde, bir işlem, belirli bir sınıfta, belirli üye metoduna, mevcut olan öz niteliklerin tür tanımlamaları yapılarak isim verilmesiyle tanımlanır. (öz niteliklerin tür tanımları, aşırı yüklenmiş metodları çözmek için kullanılır) Eğer iki sınıf aynı metod ismini tanımlıyor ve metod ortak bir ata sınıftan miras alınmış sanal bir metod değilse, o zaman metodlar iki farklı işlem olarak dikkate alınır.

Örnek: Common Lisp Nesne Sisteminde, bir işlem, belirli bir jenerik metod nesnesi ile tanımlanır. Farklı bağlamlardaki aynı metinsel isim, farklı jenerik metod nesnlererine işaret edebilir ve bu durumda da farklı işlemler olarak dikkate alınırlar.

Örnek: Açık sistemlerin yönetimi için taslak ISO standardında, bir işlem, global olarak bir kayıt otoritesi (registration authority) tarafından atanan eşsiz bir belirleyici (unique identifier) ile tanımlanmaktadır.

Talepler, nesneleri tanımlayabilirler.

Bir talep, ilişkili öz niteliklere sahip olabilir ve bir hizmet bir veya birden daha fazla sonuç döndürebilir. Bir öz nitelik veya bir sonuç bir nesneyi tanımlıyor olabilir. (Çoğu sistemde her talep için varolan tanımlanmış öz nitelik, talebi gerçekleştirmek için varolan nesneyi tanımlasa da, başka ihtimaller de mevcuttur. -Klasik ve jenerik nesne modelleri tablosuna bakınız.)

Bir nesne doğrudan ve güvenilir olarak tanımlanabilir. Nesne tanımlaması, nesnenin tanımlanması bakımından değil, adlandırılamsı bakımından doğrudandır. Nesne tanımlaması, güvenilirdir çünkü, bir tanımlayıcının tekrar edilmesi, her zaman aynı nesneyi işaret edecektir. (Uzay zamanın pragmatik sınırlarına özne olarak) Nesneyi tanımlayan bir değer, nesne referansı olarak adlandırılır.

Ayrıntılandırma: İlişkili bir duruma sahip olan bir nesnenin, durum değişkenlerinin o anki değerlerini aşkın bir kimliği vardır; iki nesne aynı anlık duruma sahip olabilir, biri durumunu değiştirebilir ve diğeri değişmeden kalabilir. Bu gibi nesnelerde, nesne kimliği bir gerekliliktir; nesnenin (öz nitelik terimleri kullanılarak) tanımlanması elverişsiz olacaktır. Bir nesnenin açıklamasını kullanmak, belirgin bir nesne kimliği öz niteliğinin takdim edilmesini gerektirir, ki bu durum, ek değişmez ve eşsiz tümleşik kısıtlamalar getireceğinden avantajsızdır.

Yarar: İstemciler, nesnelere işaret edebilme yeteneklerine bağlı olabilirler. İstemciler, işaret ettikleri nesnenin, (nesne varolduğu sürece) doğru nesneye işaret edip etmemesi veya tamamen başarısız olması konusunda endişelenmek zorunda değildirler.

Örnek: İkonlara sahip olan bir kullanıcı arayüzü, kullanıcıların nesneleri ekran üzerindeki görsel temsiller kullanarak işaret etmelerini sağlar. Bu kullanıcı arayüzü görsel temsil kullanarak altta yatan veriye ulaşılmasını sağlar. İkonlardan veriye ulaşılması bir harita kadar güvenilir olduğu için, kullanıcılar o ikonların doğrudan veri olduklarını düşüneceklerdir.

Klasik ve Genelleştirilmiş Nesne Modelleri

En güncel nesne sistemleri, klasik nesne modeline sahiptirler. Klasik nesne modelinde, her talep hedef nesneyi tanımlayan açık bir öz niteliğe sahiptir. Hedef nesne, talebin yorumlanmasını kontrol etmektedir. Klasik nesne modelinde bir talep mesaj olarak adlandırılır ve işlendiği hedef nesnesine ulaştığı anda görülmeye başlanır. Örneğin, bir yazıcıda bir doküman yazdırmak için varolan bir talep, yazıcı nesnesine gönderilen belge yazdırma talebi olabilir.

Genelleştirilmiş nesne modeli ise, talebin hedef nesneyi açıkça belirtmesini gerektirmez. Bir istek, sıfır veya daha fazla öz niteliğe sahip olabilir, bunlardan herhangi biri nir nesneyi işaret edebilir. Bir talebin yorumlanması, bu öz niteliklerin biri veya hepsine bağlı olabilir; özellikle belirtilen bir öz nitelik yoktur. Hizmet bu işaret edilen nesnelerden biri veya 3. parti tarafından sunuluyor olabilir. Örneğin, belirli bir yazıcıda, belirli bir dokümanı yazdırma talebi, özel bir çeşit belgeyi, yine özel bir çeşit yazıcıda yazdırmak için oluşturulmuş bir işlem tarafından halledilebilir. Bu işlem, sadece bu özel çeşit belgeyi yine özel çeşit yazıcıda çalıştırma talebi geldiğinde çalıştırılacaktır.

Genelleştirilmiş nesne modeli, klasik nesne modelini, özel bir durum olarak içermektedir. Bir mesajın klasik olarak bir nesneye gönderilmesi, hizmetin bir nesne tarafından belirli bir öz nitelikle ve klasik modelde ayrık bir öz nitelik kullanılarak sunulduğu, genelleştirilmiş talebin eşitidir. Genelleştirilmiş nesne modeli, bir talebin yorumlanmasının, kesin olarak, belirlenmiş bir işleme dayalı olduğu sıradan işlemleri özel bir durum olarak da içerir.

Genelleştirilmiş nesne modelleri, Common Lisp Nesne Sistemi ve Irıs veritabanlarında kullanılmaktadır. Genelleştirilmiş Modellerin nerelerde ortaya çıktıkları henüz tamamen bilinmese de, uygulama bilgisinin özenle parçalanamadığı ayrık nesneler arasında, daha genel bir nesne modelinin gerekliliği açıktır.

Karşıt Örnek: Standart Unix kullanıcı arayüzü, dosyalara işaret etmek için metinsel isimler kullanır. Metinsel isim, dizin hiyerarşisi kullanılarak asıl dosyaya işaret eder. Bu işaretleme, her an dosyalar taşınabildiği ve dizin yapısı yeniden düzenlenebildiği için güvenilir değildir. Örneğin, bir kullanıcı, dizini listelediğinde, bir foo dosyası görüntüleniyorsa, kullanıcı bir sonraki listelemede foo isminin yine aynı dosyayı mı, yoksa farklı bir dosyayı mı işaret ettiğinden emin olamaz. (Unix çekirdeği içinde, inode sayıları, güvenilir bir şekilde dosyaları tanımlamak için kullanılmaktadır.)

Örnek: Unix’in bir dosya isminin güvenilir olarak bir dosyayı işaret edemedii dizin listelemesinin aksine, Dynamic Windows’da, sistem hangi dosyanın (nesnenin) ekrandaki hangi metine işaret ettiğini hatırlar. Eğer listeleme bir foo dosyası gösteriyor ise, kullanıcı ekrandaki foo metnine tıkladığı anda, dosya ile yapabileceği işlemleri gösteren bir menu ortaya çıkar. Dosya yeniden adlandırılsa bile bu işlem çalışmaktadır.

Örnek: HP NewWave ortamında, bir uygulama belge nesnesinden, grafik nesnesine bir bağlantı oluşturabilir. Bu bağlantı, kullanıcı grafik nesnesini başka bir dizine taşısa dahi varolmaya devam edecektir. Belge başka bir sisteme kopyalandığında, grafik nesnesi de aynı zamanda kopyalanacaktır.

Karşıt Örnek: Unix içinde, bir C kaynak kodu dosyası, başka dosyalara isimleriyle atıfta bulunabilir. Eğer dizin yapısı yeniden düzenlenirse, dosya içinde atıfta bulunulan “bağlantı” da bozulabilir. Dosya ismi yanlış bir dosyaya işaret edebilir ya da işaret ettiği yerde dosya mevcut olmayabilir.

Örnek: C++’da nesneler, işaretçiler ve referanslar kullanılarak tanımlanmaktadır. Bir işaretçi veya referans, işaret ettiği nesne varoldu sürece geçerlidir.

Karşıt örnek: İlişkisel bir veritabanında, bir değişkenler demetine (tuple) (bir sorgu içinde) demetin öz niteliklerini tanımlayan değer tanımları vasıtasıyla erişilebilir. Farklı demetler (Tuple), eğer öznitelikler değiştiriliyorsa, aynı tanım ile farklı zamanlarda erişiliyor olabilir. (Bir demete (tuple) güvenilir erişim, sadece demet (tuple) içerisinde anahtar öz nitelikler varsa yapılabilir. Anahtar öz nitelikler, birbiriyle ilişkisi olan değişken demetlerini (tuple) eşsiz biçimde tanımlayan değişmez öz niteliklerdir.

Karşıt örnek: HP SoftBench Ortamında, talep mesajının hedefi, bir araç sınıfından, bir mesaj isminden ve özel bir veri dosyasını tanımlayan bir metinden oluşan açıklama vasıtasıyla tanımlanmaktadır. Bir araç aktivasyonu, bu değerleri, her araç tarafından belirtilen karşılık gelen değerlerle eşleştirerek istenen hizmeti gerçekleştirmek için seçilir. İstemci, aynı aracın ya da araç aktivasyonunun, her seferinde istemci mesajı tarafından verilen belirli tanımlama cevabını vereceğini varsayamaz. Gerçekte, istemci, herhangi bir araç aktivasyonunun cevap vereceğini veya en fazla bir araç aktivasyonunun cevap vereceğini varsayamaz.

Yarar: Doğrudan nesnenin tanımlanması, normalde, nesneyi, kendi açıklamasına bağlı olarak tanımlamaktan daha verimlidir.

Yeni nesneler yaratılabilirler.

İstemci varolan nesnelerden farklı olan yeni nesnelerin yaratılmasını talep edebilir.

Yarar: Zamana bağlı değişen davranışa sahip olan nesneler, birden çok istemcilerin etkileşimine izin verirler. Yeni nesnelerin yaratılması, istemcilerin yanlışlıkla aynı nesneyi paylaşarak çatışmalarını önlemek için kullanılır. İstemciler, yeni yaratılan nesnelerin ayrıklığından sorumlu değildirler.

Örnek: Bir istemci programı yeni ve boş bir sözlük nesnesi yaratır. Yeni sözlük nesnesi, tüm diğer sözlük nesnelerinden, hatta boş olanlardan dahi ayrıktır. Eğer istemci, bu sözlük nesnesinin durumunu, bir isim ve bağlantılı değer girerek değiştirirse, diğer sözlük nesneleri etkilenmeyeceklerdir.

Örnek: Bir ViewPoint kullanıcısı, yeni bir belge yaratır. Örneğin, varolan bir belgeyi kopyalar. Yeni belge, ekranda yeni bir ikon olarak, diğer tüm belgelerden görünür olarak ayrıktır. Belgenin eşsizliği sistem tarafından garanti edilmektedir. Kullanıcı, belgeye herhangi bir eşsiz isim atamak zorunda değildir.

İşlemler jenerik olabilirler.

Bir hizmetin, farklı nesneler için, gözle görünür biçimde farklı davranışları olan, (benzer amaçları paylaşıyor olsalar dahi) farklı uygulanımları (farklı kodu) olabilir. Bir istemci her nesne veya hizmet için aynı talepleri bildiriyor olabilir. (Talepler ortak bir işlemi tanımlarlar) ve her ayrı talep için, uygun bir uygulanım seçilir. Verilen bir hizmet için farklı uygulanımların olmasında bir sayı sınırı yoktur.

Birden çok uygulanımı bulunan işleme, jenerik işlem adı verilir. Jenerik işlemleri talep eden istemcilerin kendileri de, farklı nesne çeşitleri üzerinde ortak bir aktivite gerçekleştirebilmeleri bakımından jenerik olabilirler.

Bir hizmeti gerçekleştirmek için kod seçimi (bağlama) (binding), talep içinde tanımlanmış nesnelere dayalıdır. Genel olarak, nesnelerin tanımlanması, istek bildirildiği and meydana gelmektedir, bu sayede kod seçimi, tam o anda meydana gelebilir. (dinamik bağlama) (dynamic binding) Bazı zamanlarda, kod seçimi, yürütme zamanından önce bilinen etkenlere bağlıdır, o zaman kod, programın derlenme ya da linking anında seçilebilir. (static binding) (static binding)

Yarar: Jenerik işlemlerin bir yararı, sistemin şeffaf bir şekilde bir hizmetin çoklu uygulanımlarını sunmasıdır. Bu özel durumda, uygulanımlar, gözlemlenebilir şekilde eşit etkiler üretirler. Bir hizmeti talep eden istemcinin, farklı nesneler için farklı kodların çalıştığını bilmesine gerek yoktur.

Örnek: Bir heterojen dağıtık sistem, farklı donanım mimarilerinde uygulamanın farklı versiyonlarını sunuyor olabilir. İstemci uygulaması, basitçe, hedef nesnenin yere bağlı olarak hangi kodu çalıştıracağını bilmeden taleplerde bulunur.

Örnek: Modemleri yönetmeye yarayan bir ağ yönetim uygulaması, sistemdeki modemlerin yerine bağlı olarak farklı kodların yürütülebileceğini bilmeden, basitçe modemlere isteklerde bulunur.

Örnek: Sözlük nesnelerinin yeni bir uygulanımı, farklı bir isim altında kütüphaneye eklenmiştir, bu sayede eski uygulanım sistemde varolmaya devam etmektedir. Yeni uygulanım, bir çok durumda daha yüksek performans sunmaktadır, ancak bazı kullanım desenlerine bağlı olarak eski uygulanımın bazı koşullarda daha iyi performansa sahip olduğu bilinmektedir. Sözlük nesnelerini kullanan bir istemci program, beklenen kullanıma bağlı olarak, yarattığı her sözlük için daha uygun uygulanımı seçmek üzere değiştirilmiştir. Sözlük nesnelerini kullanan program parçaları değiştirilmemiştir, iki uygulanımla birlikte çalışırlar.

Yarar: Jenerik işlemlerin bir diğer yararı da kodun daha genel olmasıdır, bu sayede kodun yeniden kullanılabilirliği artar. Bu durumda, jenerik işlemin, farklı uygulanımları gözle görülür biçimde farklı etkiler üretebilirler.

Örnek: Karşılaştırma hizmeti sunan bir nesneler kümesini sıralayacak bir sıralama modülü sunulabilir.

Yarar: Kullanıcı ara yüzleri örneğinde, kullanıcılar, bir çok durumda standart bir zihinsel model kullanabilirler.

Örnek: ViewPoint, atanmış işlev tuşları kullanarak, herhangi bir tür nesne üzerinde çalıştırılabilecek jenerik komut kümeleri sunmaktadır.

Örnek: HP NewWave ortamının kullanıcılarının, herhangi bir tür nesneyi yazdırmak için, sadece nesneyi yazıcı ikonunun üzerine sürükleyip bırakmayı hatırlamaları yeterlidir.

Yarar: Jenerik işlemler, açık sistemlerin gerçekleştirimlerini kolaylaştırmaktadır. Açık bir sistem, yeni nesnelerin dinamik olarak ortaya konduğu ve bu sayede yeni nesnelerin, varolan istemcilerin kodları değiştirilmeden çalıştırıldığı sistemlerdir. Varolan istemciler, istemci taleplerini destekledikleri için yeni yaratılmış nesneleri kullanabilirler. Açık bir sistem yeni yazılım bileşenlerinin yaratılmasına ve sistem çalışırken yüklenmesine olanak verir. Açık sistemlerin evrilmeleri ve geliştirilmeleri daha kolaydır.

Nesneler sundukları hizmetlere göre sınıflandırılabilirler.

Nesneler bağlı olan hizmetler, arayüz şeklinde açıklanabilirler. Bir arayüz, nesnenin istemci tarafından nasıl kullanıldığını, nesneyi öz nitelik olarak tanımlayan muhtemel istekler kümesini tanımlayarak açıklar. Bu tanımlama, diğer istek özniteliklerinin mantıklı değerlerini ve her taleple ilgili muhtemel sonuçları içerebilir ve ayrıca taleplerin davranışlarını da açıklayabilir. Nesneler sundukları hizmetlere göre, yani sundukları arayüzlerin terimleriyle sınıflandırılabilirler.

Yarar: Nesnelerin hizmetlerine dayalı sınıflandırması, nesnelerin anlaşılmasını kolaylaştırmak için nesneleri organize etmenin bir yoludur. Nesnenin bir sınıflandırması, nesneden istemci tarafından beklenen hizmetleri açıklamak ve derleme zamanında nesnelerin hatalı kullanımlarını kontrol etmek için de kullanılabilir. (örneğin nesnenin desteklemediği bir işlemin gerçekleştirilmesinin talep edilmesi gibi tür hataları)

Örnek: HP NewWave ortamının bir kullanıcısı, menülerden istifade ederek bir nesneyle ilgili geçerli işlemleri görsel olarak belirleyebilir. Seçili nesne için geçerli olmayan işlemler, uygulanabilir işlemlerden ayırt etmek için gölgeli olarak gösterilir.

Karşıt örnek: Bir Unix kullanıcısı, ayrı ayrı her dosya için hangi komutların uygulanabileceğini hatırlamak zorundadır. Eğer kullanıcı bir hata yapar ve yanlış dosya türü için yanlış komutu çalıştırırsa, bekleyeceği en iyi şey komutun dosyanın hatalı türde olduğunu tespit ederek bir hata mesajı vermesidir. Kullanıcının verilen bir dosya için uygun komutları bilebilmesinin doğrudan bir yolu yoktur.

Örnek: Bir C++ sınıfı, nesnenin örnekleri (instance) tarafından sunulan hizemetleri, her örnekteki üye metodları listeleyerek tanımlar. Ayrıca statik tür kontrolü amacı için, bir tür olarak hizmet eder. (Bir C++ sınıfı, sınıfın örneğinin sunduğu hizmetleri açıklamaktan daha çok iş yapar, ayrıca sınıfın uygulanımlarını da tanımlar.)

Örnek: Açık sistemlerin yönetimi için taslak ISO Standartlarında, bir sistem yönetim nesnesi, bir nesnenin öz nitelik ve eylemleri belirtilerek tanımlanır. Geliştiriciler, sınıfı nesneye erişen uygulamalar yazmak için kullanırlar.

Bir nesne, farklı bir nesnenin sunduğu hizmetlerin bir altkümesini sunabilir, bu da hiyerarşik sınıflandırmaya yol açar. (Hiyerarşi terimi, birçok nesne sistemi daha genel sınıflandırma yapılarını desteklemelerine rağmen sıklıkla gayri resmi bir şekilde kullanılmaktadır.) Arayüz hiyerarşisi aynı zamanda tür hiyerarşisi olarak da kullanılabilir, örneğin, istek öz niteliklerinin mantıklı değerlerini tanımlamak için.

Bağlantılı kavramlar.

Nesne sistemleri incelememizde, belirli kavramlar, zorunlu olmayan bir şekilde nesne fikrine bağlı olarak yeterli sıklıkla karşımıza çıkarlar. Belki de gelecekte düşüncelerimiz evrimleştikçe, bu çağrışımlar daha da güçlenecek ve nesnelerin özünün bir parçası olarak kabul edilecekler.

Olay bildirimi (Event notification). Bir istemci, durum değişikliği gibi, bir nesneyle bağlantılı bir olay ve koşula olan ilgisini kayıt altına alabilir ve olay veya koşul meydana geldiğinde bildirim alabilir.

Olaya dayalı kontrol yapısı (Event-driven control structure). Bir program yapısı, gelen olayları bekleyen ve onları uygun işleyicilere sev eden üst seviye olay örgüsü ile karakterize edilir.

Sunum-semantik bölünmesi (Presentation-semantic split). Bir program yapısı, soyut bir bilgiyi (semantik bir nesne) modelleyen ve bu tarz bilgiyi kullanıcıya sunan (bir sunum nesnesi) farklı nesnelerin kullanılmasıyla karakterize edilir. Tekil bir semantik nesne, birden fazla, bağlantılı, farklı sunum nesnelerine sahip olabilir. Örneğin, finansal verilerin, pasta diyagramı ve çubuk diyagramı ile aynı anda gösterilebilmesi gibi.

Bileşik nesneler (Composite objects). Bir bileşik nesne, birden fazla farklı nesnenin birbirleriyle birleştirilmesi (combining) veya bağlanması (linking) ile oluşur. Bu sayede bileşik nesne üzerinde tek bir nesne gibi değişiklik yapılabilir. (kopyalanabilir ya da taşınabilir.) Örneğin, bir belge nesnesi, belge içindeki bir figürde bulunan bir grafik nesnesi ile bağlantılı olabilir. Bir sıcak bağlantı (hot link) grafiğe bağlı olan veri değiştiği anda, belgenin güncellenmesini sağlar.

Aktif nesneler (Active objects). Aktif bir nesne, bir istemci tarafından talep edilmeden, hesaplamayı (computation) kendiliğinden başlatabilir. Aktif bir nesne, eşzamanlı bir işlemdir; kendine ait bir etkinliğe ve kontrol için iş parçacığına sahiptir. (thread of control)

İlişkiler (Relationships). Bir ilişki birden fazla nesneyle, ayrı ayrı olmadan alakalı olan bilgidir. Örneğin, bir çalışan ilişlisi, kurumlar ve kişiler arasındaki ilişkiyi tanımlamaktadır.

Yarar: Bir arayüz hiyerarşisi bir istemcinin, birden fala çeşit nesne üzerinde çalışabileceğini, jenerik işlemler için talep bildiriminde bulunarak gösterir.

Örnek: C++ sınıf türetme üzerine kurulu bir tür hiyerarşisi tanımlar: bir C++ sınıfının örneği, (referans veya işaretçi vasıtasıyla), bir temel (public) sınıf beklendiğinde, herhangi bağlamda kullanılabilir. C++’da sınıf türetme, bir sınıfın örneği, temel sınıf tarafından tanımlanmış tüm hizmetleri sunulduğu anda garanti edilmiş (semantik olarak değil, sentetik olarak) olur.

Örnek: Dynamic Windows kullanıcı arayüzü, sunum türleri için kullanıcıya verilen bağlam için kabul edilebilir nesne kümelerini karakterize eden bir hiyerarşi tanımlamaktadır. Örneğin, bir işleneçten (operand) bir komuta. (command)

Örnek: HP NewWave ortamı, araçlar ve kullanıcı nesneleri ayrımı gibi, ortak hizmetlere bağlı olarak, kavramsal bir hiyerarşi tanımlamaktadır. Kullanıcıların bu ayrımları anlamaları, daha basit bir zihinsel model sağladığı için, kendilerine yarar sağlar.

Nesneler uygulanımları paylaşabilirler.

Nesneler ortak bir uygulanımı paylaşabilirler.

Bir nesneyle bağlantılı olan hizmetlerin uygulanımı, genel olarak amaca uygun bilgiyi sunmak için varolan verinin biçimini ve hizmetleri gerçekleştiren kodları hep birlikte tanımlamaktadır. Sunulan mekanizmalar, genelde, birden fazla nesnenin, ortak bir uygulanımı (implementation) paylaşmasına olanak sağlar. Ortak bir uygulanımı paylaşan nesneler, özdeş veri biçimlerini sahiptirler ve yürütlecek kodu da ortak kullanırlar, ancak, her nesne tipik olarak, kendi veri kopyasına sahiptir. Herbir nesne, ortak uygulanımın bir örneği (instance) olarak düşünülebilir.

Yarar: Ortak bir uygulanımı, birçok nesne boyunca paylaşmanın, apaçık şekilde, kaynak kodunun kopyalanmasını azaltması bakımından (ayrıca bu durum değişikliklerin elle yayılmasını engellemesi bakımından kodun bakımını da kolaylaştırır) ve yürütülebilir kod büyüklüğünü azaldır (yürütülenilen kod (executable code) ortak kullanılabildiği sürece) yararı vardır. Bir uygulanımdan birden fazla örnek oluşturabilmenin mümkün olması uygulanımı da daha kullanışlı yapar.

Örnek: Smalltalk ve C++ dillerinde, nesne, sınıfın örneğidir; bir sınıf, her örnek için veri biçimini ve aynı zamanda her örnek tarafından sunulan hizmetleri uygulayan (implementing) işlemleri (procedure) belirlemektedir.

Karşıt örnek: C’de tek bir veri soyutlamasının, gizli (private) değişmez (static) veriler ile çalışan dış metod kümesini tanımlayan bir kaynak kodu dosyası ile uygulanımı gerçekleştirilebilir. Ancak, bu tanımlama, aynı davranışa sahip birden faza varlığın desteklenmesi için örneklenemez.

Nesneler kısmı uygulanımları paylaşabilirler

Benzer davranışa sahip nesnelerin, ortak uygulanımlarının belli kısımlarını paylaşmasını sağlayan mekanizmalar sıklıkla sağlanmaktadır.Örneğin, uygulanımın mirası (implementation inheritance), diğer nesne uygulanımlarını genişleterek veya rafine ederek bir nesne uygulanımının artımlı inşasını destekler.

Örnekler

Aşağıdaki örnekler istekleri göstermektedir. Bir istek, (etkisinin açıklaması ile birlikte) öz nitelikler tarafından takip edilen bir işlem olarak gösterilir. S ismi, bir yığın nesnesini tanımlamaktadır. Yığın-fabrikası ismi, yeni yığın nesneleri oluşturan bir nesneyi tanımlar. (Push: İtki)

(yeni yığın-fabrikası) Burada s olarak tanımlanan yeni, boş bir yığını döndürür.

(Push s 3) s’yi değiştirir (3 ile genişletir).

(Push s 4) s’yi değiştirir (4 ile genişletir).

(Pop s) s’yi değiştirir (4’ü kaldırır). 4 döndürür.

(Pop s) s değiştirir (3’ü kaldırır). 3 döndürür.

(Pop s) Boş döndürür, istisna durumudur.

Aşağıdaki örnekler, arayüzleri göstermektedir. Asapların Bir arayüz, bir nesneye uygulanabilen bir dizi isteği tanımlar. Her arabirim, bir istek şeması kümesi olarak gösterilir; burada bir istek şeması, belirli bir işlemi belirten muhtemel taleplerin listesini tanımlayan bir kalıptır. Bir istek şemasında bulunan • sembolü, bir bir arayüzü karşılayan nesnenin, meşru bir şekilde ortaya çıkabileceği bir öz nitelik konumunu ifade eder. Yığın arayüzünde, bir yığın nesnesinin ortaya çıkabileceği bir öz nitelik belirmektedir. Diğer öz nitelikler, türler kullanılarak açıklanmıştır. (Bu durumda, tamsayı)

Yığın arayüzü, bir yığın nesnesini karakterize eden hizmetleri açıklar:

(Push • Tamsayı) Sonuç yok.
(Pop • ) Bir tam sayı veya boş değer döndürür, bir istisnadır.

Kuyruk arayüzü, bir kuyruk nesnesini karakterize eden hizmetleri açıklar:

(Push • Tamsayı) Sonuç yok.
(Pull • ) Bir tam sayı veya boş değer döndürür, bir istisnadır.

Havuz (Sink) arayüzü, yığınlar ve kuyruklar için ortak olan hizmetleri açıklar:

(Push • Tamsayı) Sonuç yok. (ortak metod, işlev, fonksiyon)

Aşağıdaki şekil, bu üç arabirim arasındaki uygunluk ilişkilerine dayanan bir arabirim hiyerarşisini göstermektedir:


Yürütme esnasında çalışan benzer bir mekanizmaya Delegasyon adı verilir: Bir nesne, bir isteği diğer nesnelere delege edebilir, ve bu isteğin ardından, asıl talep edilen hizmeti kendisi adına (uygun kısımlarını) yerine getirir. (Delege edilmiş bir talep özel bir taleptir çünkü asıl talep hakkında, sonraki hizmet sağlayıcısının, asıl talebin öz niteliklerini kullanarak başka talepler oluşturmasını sağlayacak şekilde, bilgi taşımaktadır.)

Yarar: Yukarıda listelenen bakım ve boyut avantajlarına ek olarak, uygulanımların kısmı paylaşımı, yazılım yeniden kullanımının faydalarını, gereksinimlerin benzer fakat aynı olmayan durumlara kadar genişletir. Kısmi uygulanımların ortak kullanımı, ilgili nesneler arasında tutarlı davranışı teşvik etmek için yararlı bir tekniktir.

Örnek: Smalltalk ve C++’da, bir sınıf, varolan bir sınıftan (üst sınıf veya temel sınıftan) miras alınarak (türetilerek) tanımlanabilir. Yeni sınıf varolan sınıfın tanımını veri bildirimleri ekleyerek (örnek değişlenleri veya veri üyeleri) ve yeni işlemler uygulayan işlemler (metodlar ya da üye fonksiyonlar) tanımlayarak genişletebilir. Yeni sınıf, varolan sınıfın tanımını ayrı ayrı metodları veya üye fonksiyonları değiştirerek ya da iyileştirerek varolan sınıfın tanımını rafine hale getirebilir. Bir sınıf, miras alma kullanılarak değişimi destekleyecek şekilde tasarlanabilir: Sınıf, belli başlı metodları miras alarak, değiştirerek veya iyileştirerek özelleştirilebilir. Örneğin grafik nesneleri için ortak davranışı tanımlayan genel grafik nesnesi sınıfı, “resim çiz” (draw) metodunun belirli bir grafik nesnesi tanımlayan her miras alan sınıfta değiştirilmesi beklentisiyle tasarlanabilir.

3 Terminoloji

Bu bölümde, yukarıda tanıtılan temel kavramlar ve bizim tecrübemize göre iletişim sorunlarına neden olabilecek ek konular için terimler tanımlamaktayız. Terimleri belirli alanlardaki, (nesne-yönelimli programlama gibi), ya da belirli sistemlerdeki (C++ programlama dili gibi) ortak kullanımlarına göre birbirleriyle ilişkilendirmekteyiz. Terimler eşanlamlılarının seçimi ve mevcut kullanımdaki ilişkili terimleri ile birlikte ekteki tabloda gösterilmişlerdir. Tanımlar üç bölüme ayrılmıştır: soyutlama ile ilgili terimler, talep eden hizmetlerle ilgili terimler ve hizmet sunumuyla ilgili terimler.

3.1 Soyutlama ile ilgili terimler

Nesne

Tanım: Bir nesne, istemciler (kişiler veya programlar) tarafından talep edilen hizmetleri sunmakta görünür rol oynayan varlıktır. Bir nesne açıkça belirli taleplerin davranışı ile karakterize edilen soyutlamanın vücut bulmuş halidir. Hizmetler, nesnelerle ilişkili verilere erişebilir veya bunları değiştirebilir. Hizmetler, verilerin biçimine veya hizmetleri uygulanımı için kullanılan algoritmalara bağımlı olmadan tanımlanmaktadır; Özellikle, aynı davranışın birkaç muhtemel uygulanımı olabilir. Tanımlanan bir hizmete, işlem (operation) adı verilir.

Önerilen Terimler ve mevcut kullanımla ilgili olan terimler

Nesne: Örnek, sınıf örneği, vekil, varlık

Kapsüllenmiş nesne: Bilgi gizleme

Gömülü nesne: Kapsüllenmiş araç, vekil (proxy), dış metod, entegre uygulama

Korumalı nesne: Erişim kontrolü

Nesne referansı: olanak, tanıtıcısı, nesne referansı, nesne adı

Talep (istek): mesaj, metod çağırma, fonksiyon çağırma

Genel (jenerik) işlem: mesaj seçici, metod, genel (jenerik) fonksiyon, aşırı yüklü fonksiyon, sanal üye fonksiyonu, polimorfizm, dinamik bağlama Arayüz: Protokol, tür, soyut sınıf, sanal sınıf, imza

Arayüz hiyerarşisi: Kalıtım (Miras alma), özellik hiyerarşisi, tür hiyerarşisi, sınıf hiyerarşisi, alt-türleme, uyumluluk

Tür: sınıf

Alt sınıf: alt sınıf, türetilmiş sınıf

Dinamik bağlama: geç bağlama

Statik bağlama: erken bağlama

Nesne uygulanımı: sınıf, tür, şablon, yönetici, sunucu

Durum değişkeni: Örnek değişkeni, veri üyesi, öz nitelik, alan, oluk (slot)

Yöntem: Üye foksiyon

Uygulanım mirası: alt-sınıflama (sub-classing), türev, ön ek alma

Örnek: Nesnenin basit bir örneği push ve pop işlemleriyle davranışı karakterize edilen, yığın (stack) veri yapısıdır. Bu işlemler, altta yatan veri gösterimine (ki dizi veya bağlantılı liste olabilir) referans verilmeden, doğrudan tanımlanmakta ve kullanılmaktadırlar. Push ve pop işlemleri için gereken kod parçaları, soyut yığın yapısının parçası olmayan, array-index veya list-head gibi gizli (private) işlemler aracılığıyla altta yatan veriye erişirler.

Eş Anlamlılar ve İlgili Terimler: Nesnelere bazen sınıf örnekleri adı verilir. Bazı zamanlarda nesnenin, başka birşeyi modellediğini ifade etmek için suret (vekil, surrogate) terimi de kullanılmaktadır.

Kapsüllenmiş nesne

Tanım: Sadece istemciler tarafından talep bildirildiğinde erişilebilen nesne türüne kapsüllenmiş nesne adı verilir.

Örnek: C++ gibi, nesne yönelimli bir programlama dilinde, nesnenin uygulanımı için kullanılan veri yapıları ve ilgili işlemler, nesneye istekte bulunan istemcilerden gizlenmişlerdir. Örneğin, bağlantılı liste kullanılarak yazılmış bir yığına, istemciler bağlantılı liste işlemleri kullanarak erişemezler.

Eş anlamlılar ve İlgili Terimler: Kapsülleme, aynı zamanda bilgi gizleme olarak da adlandırılmaktadır. Kapsülleme terimi bazen, nesnenin bağımsız, yani diğer nesnelerle bilgi paylaşmadığını ve fiziksel olarak tek bir yerde temsil ettiğini vurgulamak için kullanılır.

Gerekçe: Bu kavram, kapsülleme teriminin üç ortak anlamından biridir. Bu tanımın amacı, tercih edilen kullanımı belirtmektir. Sonraki iki tanım, diğer anlamlar için alternatif terimler sunar.

Gömülü nesne

Tanım: Gömülü nesne, hali hazırda var olan bir yapı veya işlemin (örneğin nesne olmayan) nesne yapısına sarıldığı, uygun bir arayüz kodu ile yaratılan nesnedir.

Örnek: Uç birim (terminal) için yazılmış bir uygulama, kullanıcı arayüzü tarafından üretilen istekleri, kullanıcı tarafından girilen karakterleri, çıktı karakterleri olarak uygun sunum nesnelerine çevirerek nesne-yönelimli kullanıcı arayüzü standartlarına uyması için üretilmiştir.

Eş Anlamlılar ve İlgili Terimler: Gömülü nesneler oluşturmaya, genellikle kapsülleme veya araç kapsülleme adı verilmektedir. Kapsülleme teriminin bu kullanımı, kapsüllenmiş nesne ifadesinden farklıdır. Uygulama entegrasyonu ve Araç entegrasyonu terimleri ilgili terimlere dahillerdir. Ağ yönetiminde kullanılan gömülü nesnelere vekil (proxy) adı verilir.

Gerekçe: Bu kavram, kapsülleme teriminin yaygın olarak kullanıldığı üç kavramdan biridir. Gömme terimi, bu kavramı, kapsüllenmiş nesnelerden ayırt edebilmek için alternatif olarak seçilmiştir.

Belirsiz Terimler

Terminolojiyi geliştirirken hatalı iletişim ve kafa karışıklığı yaratan bazı terimlerle karşılaştık.

Kapsülleme, en çok kafa karışıklığı yaratan terimdir. Var olan kullanımda, kapsülleme teriminin üç farklı anlamı var: Soyutlama için engeller koymak (çn. bilgi gizleme), yabancı bileşenlerin sisteme entegre edilmesi (çn. gevşek veya sıkı bağlılık), farklı kullanıcıların hizmetlere olan erişimlerinin denetlenmesi. (çn. erişim kontrolü) Bu kavramlar için, sırasıyla kapsülleme, gömme ve koruma terimleri önerilmiştir.

Miras terimi de kafa karışıklığına sebep olmaktadır. Mevcut kullanımda mirasın iki temel anlamı vardır: Nesnelerin uygulanımlarının tanımlamalarının paylaşılarak organize edilmesi ve ortak davranış ve arayüzler vasıtasıyla nesnelerin sınıflandırılması. (Bu kavramlar için sırasıyla önerilen kavramlar, uygulanım kalıtımı ve arayüz hiyerarşisidir)

Diğer kafa karıştırıcı iki terim de tür ve sınıf terimleridir. Bu terimler, aynı anda nesnelerin dış arayüzleri veya nesnelerin uygulanımı anlamlarına gelebilmektedirler.

Birden çok anlama gelen şeylerin ayrımını yapmak, temel kavramlara aşina olan kişiler için dahi ince bir ustalık gerektirebilmektedir.

Korumalı Nesne

Tanım: Korumalı nesne, belirli istemcilerin kendine olan hizmet taleplerini kısıtlama yeteneğine sahip olan nesnedir.

Örnek: Bir posta kutusu (mailbox) nesnesi, yalnızca belirli bir kişinin read (okuma) isteğine cevap verir.

Eş anlamlılar ve İlgili Terimler: Korumalı nesnelerin erişim kontrolü sağladığı söylenir.

Gerekçe: Bu kavram sıklıkla kapsüllenmiş nesne kavramı ile karıştırılmaktadır. Aslında, bazı sistemler kapsülleme ve koruma için benzer mekanizmalar kullanmaktadırlar. (Korumalı nesnelerin aynı zamanda kapsüllenmiş olmaları da beklenebilir.) Korumalı terimi, işletim sistemleri alanındaki ortak kullanıma dayanarak seçilmiştir.

3.2 Hizmet talep etme ile ilgili terimler

Nesne referansı

Tanım: Nesne referansı, belirli bir nesneyi, güvenilir bir şekilde tanımlayan bir değerdir.

Örnek: C++’da, bir işaretçi değeri, bir nesne referansı görevi yapar. HP NewWave ortamında, bir belge nesnesinden bir grafik nesnesine yapılan bir bağlantı, bir nesne referansıdır.

Unix dosya sisteminde, dosya adı bir referans değildir, çünkü zamanla dosyanın veya içinde bulunduğu dizinin adı değişebilir.

Eş Anlamlılar ve İlgili Terimler: Nesne referansı, bazen tanıtıcı (handle), nesne tanımlayıcısı (object identifier) veya nesne ismi (object name) olarak da adlandırılabilmektedir.

İstek

Tanım: Bir istek, bir hizmetin gerçekleştirilmesi için, bir istemci tarafından gerçekleştirilen eylemdir. Bir istek, istenen hizmeti belirten bir işlemi tanımlar. Bir istek, nesneleri tanımlamak için gerekli olan öz nitelikleri içerir. Bir istek, hizmetin nasıl yapılacağını tek başına belirlemez.

Bir istek bildirildiğinde, bir bağlama (binding) işlemi gerçekte yürütülecek kodu ve kod tarafından erişilecek verileri belirler. Bir isteği yerine getirmenin sonucu, sonuçları istemciye döndürmek olabilir; Sonuçlar istenen hizmet yerine getirilirken, ortaya çıkan olağan dışı durumları içeren durum bilgisi benzeri değerleri de içerebilir.

Örnek: Nesne-yönelimli programlama dilinde,programlama diline özgü bir çağrı biçiminin çalıştırılmasıyla, istek bildirilmiş olur. Nesne yönelimli bir kullanıcı arayüzünde, istekler, farenin belli bir görsel imgenin üzerinde gezinirken, farenin butonuna tıklanmasına benzer, fare hareketleri aracılığıyla bildirilmektedir.

Eş Anlamlılar ve İlişkili Terimler: Smalltalk’da, bir istekte bulunmaya, mesaj gönderme veya mesaj devretme denir. C++’da, bir istek bildirme, üye fonksiyonun çağrılması (member function invocation) olarak adlandırılır. CLOS’da, bir istek yayınlamak jenerik fonksiyon (işlev) çağrısı olarak adlandırılır.

Gerekçe: İki nedenden dolayı, geleneksel “mesaj” terimini kullanmaktan kaçınmaktayız. Birincisi, mesaj göndermenin istemci ve hizmet sağlayıcı tarafından eş-zamanlı yürütülmesi anlamına geldiği yanlış anlaması yaygındır.

Diğeri, bir mesajın işlem yapıldığı tek bir konuma gönderildiği yanlış anlamasıdır. Klasik ve genelleştirilmiş nesne modellerinde tanımlandığı üzere, bu tanım genelleştirilmiş nesne modelleri için hatalı olabilir.

Jenerik (Genel) İşlem

Tanım: Jenerik (genel) bir işlem, farklı nesneler için, gözle görülür şekilde farklı davranışlar gösteren, istemciler tarafından keyfi olarak talep edilebilen ve farklı uygulanımları olan bir işlemdir türüdür.

Örnek: Yazdırma işlemi, yazdırılabilir herhangi bir nesneden talep edilebilir, örn. bir doküman

veya bir elektronik tablo.

Eş anlamlılar ve İlgili Terimler: C++’da, jenerik işlemlere, sanal üye (virtual member functions) fonksiyonlar adı verilir. Smalltalk’ta ise aynı kavrama mesaj seçici (message selector) denir. Jenerik İşlem yeteneği, aynı zamanda polimorfizm (çok biçimlilik) ve fonksiyon aşırı yükleme olarak adlandırılmaktadır. (Bakınız statik ve dinamik bağlama.)

Gerekçe: Jenerik kelimesi, hizmetin birçok nesne için ortak olduğu gerçeğini vurgular.

Arayüz

Tanım: Bir arayüz, bir nesnenin olası kullanım biçimlerinin tanımıdır. Özellikle, bir arayüz, nesneyi bir öz nitelik olarak tanımlayan bir dizi muhtemel istek anlamına gelir. Bir arayüz tarafından tanımlanan olası kullanımlar anlamlılar ise, “nesne arayüzü sağlamaktadır” denir. Bir arayüz, öz niteliklerin ve dönen sonuçların tür ve isteklerin davranış tanımlarını yapabilir. Bir nesnenin temel arayüzü (principal interface), nesnenin olası tüm kullanımlarını açıklayan bir arayüze verilen addır.

Örnek: Bir yığın arayüzü push ve pop işlemlerinden oluşabilir. Sadece tamsayı türünden verilerin yığına push işlemi aracılığıyla eklenmesine olanak veriyor olabilir. (Bakınız: Yığın örnek işlemleri)

Eş anlamlılar ve İlgili Terimler: Protokol terimi, sıklıkla, nesnelere gönderilmesi mümkün bir mesaj kümesini tanımlamak için kullanılır. Öz nitelik ve sonuç türlerini tanımlayan bir arayüze imza (signature) denir.

Birçok nesne yönelimli programlama dilinde, bir arayüz, soyut sınıf veya sanal sınıf tarafından tanımlanır ve bu sınıf uygulanım-tabanlı bilgiyi (ör. Işlev kısımları — procedure bodies ) önemsemez ve doğrudan uygulanımları mümkün değildir. Tür olarak kullanılan bir arayüze, arayüz-tür (interface type) denir.

Arayüz Hiyerarşisi

Tanım: Arayüz hiyerarşisi, arayüzlerin ve dolayısıyla nesnelerin arayüz uygunluğu (object-conformance) terimlerine göre sınıflandırılmasıdır. Bir arayüz, eğer birinci arayüze uygun olan nesne, mutlaka ikinci arayüze de uygun ise, diğer arayüze uygundur.

Örnek: Kuyruk ve yığın veri yapılarının ikisi de, tek bir verinin tek bir seferde eklenebildiği veri havuzları olarak düşünülürler. Yığın arayüzü push ve pop isteklerinden oluşur. Kuyruk arayüzü ise, push ve pull steklerinden oluşur. Bu iki yapının paylaştığı hizmet havuz (sink) arayüzüdür ki, sadece push isteğinden oluşur. Yığın ve kuyruk arayüzlerinin her ikisi de havuz arayüzünü sağlamaktadır. Havuz arayüzünü sağladığı varsayılan nesnelerle çalışan (yani nesnelere sadece push isteği gönderen) bir program, yığın ve kuyruk nesneleriyle çalışabilir. (Yığın ve kuyruk örneklerine bakınız.)

Eş Anlamlılar ve İlgili Terimler: Arayüz hiyerarşilerine, belirtim hiyerarşileri de denir. Arayüz uygunluğunun bir kalıtım mekanizması kullanılarak tanımlandığı sistemlerde, arayüz hiyerarşisine bazen kalıtım hiyerarşisi denir; bununla birlikte, bu kavram için kalıtım (miras) terimini kullanılmasını önermiyoruz. (aşağıda uygulanım mirasına bakınız). Arayüzlerin tür olarak kullanıldığı sistemlerde, arayüz hiyerarşisine, tür hiyerarşisi veya alt-tür hiyerarşisi denilebilir. C++ gibi, arayüzlerin, uygulanımlarından ayrılmadığı sistemlerde, arayüz hiyerarşisine, sınıf hiyerarşisi de denilebilir.

Gerekçe: Kalıtım (miras) teriminin birçok kullanımından biri, arayüz hiyerarşisine gönderme yapmaktadır. Kalıtım kelimesini, özellikle arayüz uygulanımında sınıflandırma termininden ayırmak için, birikimli bir tanımlama mekanizması anlamına gelmesi için kısıtlamayı seçtik.

Arayüz kalıtımı terimi, nesnelerin, istemciler tarafından görülebilen davranışlarına (hizmetlerine) göre sınıflandırılmasını vurgulamaktadır. Arayüz uygunluğuna dayalı sınıflandırma, katı bir hiyerarşi oluşturmamalıdır; Bununla birlikte, hiyerarşi terimi, kafes (lattice) gibi diğer daha teknik terimlere nazaran daha yaygın olarak kullanılması ve anlaşılması avantajına sahiptir.

Tür

Tanım: Tür, anlamlı kullanımları karakterize eden değerlerin sınıflandırılmasıdır. Özellikle, bir tür, türe uyan değer kümesini tanımlayan bir beyan anlamına gelir (türün uzantısı olarak adlandırılır). Her nesne sistemi kendi anlamlı kullanım ve tür eğilimin tanımlamaktadır. Türlere sahip olan nesne yönelimli bir sistemde, öz niteliklerin ve isteklerin sonuçlarının belli sınırlar içerisinde olması, türler tarafından karakterize edilmektedir.

Örnek: Türlere sahip olan nesne-yönelimli programlama dili, değişkenleri için tür tanımlamaları sunmaktadır. Bir değişken, sadece beyan edilen türü sağlayan değerleri ifade edebilir. Nesne türleri, örneğin arayüz terimleri kullanılarak (yazdır işlemini destekleyen tüm nesneler) veya uygulanım terimleri (stack-as-list yani liste-bazlı-yığın uygulanımına sahip olan nesnelerin türü), gibi farklı şekillerde ifade edilebilir. Türlere sahip birçok nesne-yönelimli programlama dilinde, arayüz ve uygulanım türlerini tanımlamak için tek bir sınıf yapısı kullanılmaktadır.

Eş anlamlılar ve İlgili Terimler: Sınıf terimi genellikle tür yerine, özellikle nesne uygulanımlarının tür kavramının tek gösterimi olduğu Smalltalk gibi sistemlerde kullanılır.

Alt-tür

Tanım: Bir türün (üst-sınıf) alt-türü, alt-türün koşullarını sağlayan her değerin, üst-türün koşullarını da mutlaka sağladığı türdür. Arayüzlerin tür kavramına tekabül ettiği sistemlerde, arayüz uygunluğu (interface conformance) bir alt-tür ilişkisine örnektir.

Örnek: Çalışan kavramı, kişi kavramının alt türüdür: her çalışan nesnesi, aynı zamanda kişi nesnesidir. Jenerik bir işlem, belirli bir türden nesnelerine uygulanması için tanımlanır. Bu işlem, aynı zamanda, belirli bir türün alt-türlerine de uygulanabilir.

Eş anlamlılar ve İlgili Terimler: Uygulanım kalıtımının alt-tür yaratmanın tek yolu olduğu sistemlerde, alt-tür, alt-sınıf veya türemiş sınıf olarak adlandırılmaktadır.

Dinamik Bağlama

Tanım: Dinamik bağlama, istenen bir hizmeti gerçekleştirmek için talep bildirildiği anda yapılan kod seçimidir.

Örnek: Smalltalk’da her istek hedef nesne için uygun olan metodu bulmak için, sınıf hiyerarşisi incelenerek işlenmektedir. Sınıf hiyerarşisinde metod eklemek ya da yeniden tanımlamak gibi yapılacak her değişiklik, devam eden istekler için anında etkinlik kazanır.

Eş Anlamlılar ve İlgili Terimler: Dinamik bağlama aynı zamanda geç bağlama olarak da adlandırılır.

Statik Bağlama

Tanım: Statik bağlama, istenen bir hizmeti gerçekleştirmek için kullanılan kod seçiminin önceden yapılmış olması durumudur. Statik bağlamayı destekleyen sistemler, azaltılmış genelleme ve genişletilebilirlikten ödün vererek, daha iyi performans ve iyileştirilmiş hata denetimi sınarlar.

Örnek: C ++’da, işaretçi veya referans olmayan bir değişken, belirli bir sınıfa ait (o sınıftan türemiş olmayan) bir nesneyi ifade etmesiyle tanınır; bu değişken üzerindeki bir sanal üye fonksiyonunun çağrılması, belirli bir prosedür üzerinde doğrudan bir çağrı olarak derlenebilir.

Eş Anlamlılar ve İlgili Terimler: Statik bağlama, erken bağlama olarak da adlandırılır.

3.3 Hizmet sunumuyla ilgili terimler

Nesnenin Uygulanımı

Tanım: Bir nesne uygulaması, bir nesneyle ilişkili hizmet kümesinin nasıl yürütüleceğinin yürütülebilir bir açıklamasıdır. Nesne ile ilişkili verilerin biçimini ve hizmetlerin veriyi nasıl değiştirdiğini tanımlamaktadır. Birden fazla nesne ortak bir uygulanımın parçalarını paylaşabilir; yürütülebilir kod nesneler arasında paylaşılsa da, her nesne tipik olarak verilerin kendi kopyasına sahiptir.

Örnek: Bir daire nesnesi, dairenin durumunu iki durum değişkeni ile tanımlıyor olabilir: Merkez ve çap. Ayrıca daire nesnesi genişle ve yer değiştir adında iki metoda da sahip olabilir.

genişle(çarpan) çap := çap*çarpan;

yer değiştir (yer değiştirme miktarı) := merkez + yer değiştirme miktarı;

Eş Anlamlılar ve İlgili Terimler: Bir nesne uygulanımı tarafından verilen veri biçimi bazen şablon olarak adlandırılır. Birden fazla nesnenin uygulanımına bazen yönetici veya sunucu denir. Bir sınıf, ortak bir uygulanımı paylaşan birden fazla nesne oluşturmak için örneklendirilebilen bir nesne uygulanımıdır; Nesneler sınıfın örnekleri olarak adlandırılır. Bir Fabrika, nesneler yaratmak için hizmet sağlayan bir nesnedir; Bu nedenle sınıf nesnesi de bir fabrikadır.

Durum Değişkeni

Tanım: Durum değişkeni, nesnelerle ilişkili verilerin somut gerçekleşimi olarak görev yapan bir değişkendir. Bir durum değişkeni, tek bir nesneyle veya birden çok nesneyle ilişkilendirilebilir. Durum değişkenleri, nesne uygulamalarında sıklıkla bu durum değişkenlerini okuyabilen ve yazabilen yöntemlerle tanımlanır.

Eş Anlamlılar ve İlgili Terimler: Durum değişkenleri aynı zamanda örnek değişkenleri, veri üyeleri, alanlar, özellikler veya oluklar (slots) olarak da adlandırılır

Gerekçe: Bir durum değişkeni, zamana bağlı olarak değişen davranışın uygulanımını gerçekleştiren bir araç olduğunu, nesnelerin istemci tarafından görülebilen davranışına karşıt olarak vurgular. Örnek değişkeni terimi, örneklendirilemeyen olmayan nesneler için uygun değildir.

Metod

Tanım: Metod, hizmetleri gerçekleştiren bir işlemdir. Tipik olarak, bir nesnenin desteklediği her işlem için bir metodu (yöntemi) vardır. Metodlar, nesne uygulanımlarında, sıklıkla okumakta ve yazmakta oldukları durum değişkenleriyle birlikte tanımlanmaktadır.

Eş anlamlılar ve İlgili Terimler: C ++’da, metodlara üye fonksiyon tanımları denir.

Uygulanım kalıtımı

Tanım: Uygulanım kalıtımı (kolaylık sağlamak için burada sadece kalıtım denmiştir), nesne uygulamalarını aşamalı olarak oluşturmak için varolan bir mekanizmadır: bir nesne, diğer nesnelerin uygulanımlarına bağlı olarak tanımlanmaktadır. Yeni uygulanım, varolan nesneleri, nesne gösterimine (veri biçimi) veri ekleyerek, yeni işlemler ekleyerek ve var olan işlemlerin tanımlarını değiştirerek veya genişleterek genişletebilir.

Nesnenin Diğer Tanımları

Diğer yazarlar, nesne yönelimli programlama dillerinin temel kavramlarını belirlemeye çalışmaktadırlar:

  • Sterik ve Bobrow, bir nesneyi, hesaplama yapan ve durum kaydeden bir varlık olarak tanımlarlar. Nesne-yönelimli programlama dillerindeki çeşitliliği kabul etmekle beraber, iki kavramı temel kavramlar olarak tanımlamaktadırlar: mesaj gönderimi (jenerik işlem talepleri) ve uzmanlaşma (uygulanım kalıtımı) ve ortak olarak sınıflara sahip olma. (örneklendirilebilen uygulanıma sahip nesneler) Mesaj gönderme, soyutlamanın açık doğasından bahsetmeseler de, veri soyutlamayı desteklemek olarak tanımlanır ve kapsüllemeye sadece kısaca değinilir. Nesne davranışı protokoller (arayüzler) açısından tanımlanmıştır, ancak arayüz uygunluğu açıklanmamaktadır. Nesne kimliklendirme açıkça ele alınmamıştır. Stefik ve Bobrow, metod özelleşmesinde ve birleşiminden, bileşik nesnelerden, perspektiflerden, ek açıklamalardan, aktif değerlerden ve meta-sınıflardan da bahsetmektedirler.
  • Wegner, nesne yönelimli veri soyutlama dilini, nesneleri (yerel bir durumu paylaşan bir işlem kümesi), sınıfları (bir veya daha fazla arayüzü tanımlayan bir örneklenebilir uygulanımı), sınıf kalıtımını ve bilgi gizlemeyi (kapsülleme) desteklemek olarak tanımlar. Jenerik işlemler kavramı, soyutlamanın apaçık doğası, nesne kimliklendirme ve arayüz uygunluğu ve sınıf kalıtımı arasındaki ayrım atlanmıştır. (Alt türleme, tür olan sınıf bağlamında açıklanmaktadır.) Wegner aynı zamanda, kesin türlendirmeden, eş zamanlılıktan, dağıtımdan ve kalıcılıktan nesne-yönelimli programlama dillerini ayrıt eden özellikler olarak bahsetmektedir..
  • Thomas, nesne yöneliminin dört anahtar kavramını şöyle tanımlamaktadır: kapsülleme, mesaj gönderme (genel işlemler için istekler), sınıf kalıtımı ve bağlama (statik ve dinamik). Nesneleri, gerçek dünyadaki varlıkların, kendini açıklayan (apaçık soyutlama) benzeşenleri (analog) olarak tanımlar. Sınıfları (örnek üretilebilen uygulanımları) ve mantıksal bir sınıf hiyerarşini açıklar; (tıpkı bir arayüz hiyerarşisinin arayüzü ile ilgili olması gibi) sınıfları dış davranışa bağlı olarak ilişkilendirir. Arayüzlerden bahsetmez. Sınıflar türlerle tanımlanır ve alt türleme, davranış koruyan sınıfı kalıtımı (uygulanım kalıtımı) olarak tanımlanır. Nesnenin kimliklendirilmesi ele alınmamıştır. Thomas ayrıca meta-sınıflardan, bileşik nesnelerden ve özel mesajlardan (erişim denetiminin bir biçimi olarak) bahseder.
  • Wand, nesnelerin mantıklı durumlarını ve durum dönüşümlerini sınırlandıran bir yasaya bağlı olarak, hizmetler ve istekler kavramlarının, genel bir nesne etkileşimi kavramı ile değiştirildiği resmi bir nesne modeli sunmaktadır. Wand’ın görüşüne göre, istekler ve işlemler nesne etkileşimlerinin uygulanımıdır. Wand’ın modeli nesne yaratımını da atlamaktadır.

Bizim nesne tanımımız varolan tanımlamaların çoğundan şu şekilde farklıdır: Bir nesnenin duruma sahip olmasını gerekli olduğunu düşünmüyoruz. Her hesaplama varlığının bir nesne olmasını gerektiğini düşünmüyoruz. Bize göre, tek tek nesnelerle ilişkili olmayan veya birden çok nesneyle paylaşılan durum mümkündür. İsteklerin birden çok nesneyi içermesine ve üçüncü taraflar tarafından gerçekleştirilmesine izin veriyoruz. Bu genellemeler daha geniş bir nesne sistemi yelpazesini belirlemek içindir. Ayrıca, bizim tanımımız nesne kimliklendirmeyi, jenerik işlem kavramını ve hizmetler ve uygulanımlar arasındaki ayrımı (arayüzler) ve arayüz hiyerarşisi (sınıflandırma) ile uygulanım mirası (yapım) arasındaki ayrımı vurgulamaktadır. Belki de en önemlisi, yalnızca programlama dilleri için değil, birçok alana uygun terim ve tanımları kullanmaya çalışıyoruz.

Tekli kalıtım, bir nesne uygulanımının, tek bir varolan nesne uygulanımı açısından tanımlanmasına izin verir. Çoklu kalıtım, yeni bir nesnenin tanımlanmasında birden fazla nesne uygulanımı kullanılmasına izin verir. Kalıtım, genellikle bir sınıfın diğer sınıflardan miras aldığı sınıfsal kalıtımı biçimini alır.

Kalıtım, bir nesnenin veya sınıfın metinsel tanımını kopyalayarak ve düzenleyerek, yeni bir tanım üretmek için etkilidir; ancak eski tanımdaki değişiklikler (sonuç olarak) yeni tanıma yayılır. Ayrıca kalıtım, nesne uygulanımlarını bir kalıtım hiyerarşisinde organize etmenin bir yolunu sunmaktadır.

Örnek: Başlıklı Pencere gibi bir isme sahip olan bir sınıf, pencere sınıfından miras alınacak şekilde tanımlanabilir. Başlıklı pencere sınıfı, bir başlık örnek değişkeni ve başlık ile ilgili işlemlerin (başlığı döndürmek için, başlık işlevi) (başlığı düzenlemek için başlık-düzenle işlevi) uygulanımını sağlayan prosedürleri tanıma ekleyecektir.

Eş anlamlılar ve İlgili Terimler: Kalıtımı, birikimli tanımlama için herhangi bir mekanizma olarak tanımlamaktayız. Kalıtım ile tanımlanan bir sınıf, tanımlanmasında kullanılan sınıfların alt sınıfı olarak adlandırılır ve buna üst sınıflar denir. C++’da, alt sınıf, türetilmiş sınıf olarak da adlandırılır ve bir üst sınıf, taban sınıf olarak adlandırılır. Bir devralma hiyerarşisine, uygulanım hiyerarşisi veya sınıf hiyerarşisi de denir.

Gerekçe: Kalıtım, birçok türde hiyerarşiye göndermede kullanılan yaygın bir terimdir. Nesne yönelimli sistemlerde öncelikle arayüz hiyerarşilerine ve birikimli tanım mekanizmalarına değinmek için kullanılır. Kalıtım terimini, bir ilişkiden ziyade, kalıtım kelimesinin günlük kullanımına uygun olarak, bir işlemi belirtmek için kullanılan ikinci kavram (çn. birikimli artım mekanizması) olarak sınırlamaktayız.

4 Teşekkürler

HP object task force grubunun üyelerine bu çabaya olan katkılarından ve Walter Olthoffand ve Walt Hill’in yardımlarından dolayı teşekkür ediyoruz. Ayrıca, Hewlett-Packard çalışanlarına ve önceki belgeleri inceleyen ve önerilerinde iyileştirmeler sağlayan Nesne Yönetimi Grubu teknik komitesinin üyelerine de minnettarız. Katkılarından ötürü Bill Kent’e özellikle minnettarız.

5 Referanslar

1. D. G. Bobrow, L. G. DeMichel, R. P. Gabriel, S. E. Keene, G. Kiczales, D. A. Moon. Common Lisp Object System Specification X3J13. SIGPLANNotices 23, 9 (1988).
2. I. J. Fuller, et al. An Overview of the HP NewWave Environment. HP Journal 40, 4 (Aug. 1989), 6–23.
3. J. Johnson, et al. The Xerox Star: A Retrospective. Computer 22, 9 (Sept. 1989), 11–29.
4. M. R. Cagan. The HP SoftBench Environment: An Architeeture for a New Generation ofSoftware Tools. HP Journal 41, 3 (June 1990), 36–47.
5. D. H. Fishman, et al. Iris: An Object-Oriented Data Base System. ACM Transactions on Office Information Systems 5, 1 (1987), 48–69.
6. S. McKay, W. York, and M. McMahon. A Presentation Manager Based on Application Semantics. Proc. ACM Symposium on User Interface Software and Technology, Nov. 1989, 141–148.
7. ISO. Information Technology -Open Systems Interconnection -ManagementInformation Services -Structure ofManagement Information -Part 1: Management Information Model. Draft International Standard 10165–1. ISOIIEC JTCl/SC21 N5252, June 1990.
8. R. M. Soley, ed. Object Management Architecture Guide. Object Management Group, Inc. Framingham, Ma., October 1990.
9. P. Wegner. Learning the Language. Byte, March 1989,245–253.
10. D. Thomas. What’s in an Object? Byte, March 1989, 231–240.
11. M. Stefik & D. G. Bobrow. Object-Oriented Programming: Themes and Variations. AIMagazine 6, 4 (Winter 1986), 40–62.
12. Y. Wand. A Proposal for a Formal Model of Objects. In Object-Oriented Concepts, Databases, and Applications. W. Kim, F. H. Lochovsky, eds. ACM Press, 1989, 537–559.


Projelerle PHP 7

Ben Mutlu Koçak, Bilgisayar Mühendisiyim, ZCPE Sertifikasına sahibim ve “Hiç Bilmeyenler İçin İnternet Programlamaya Giriş — PHP 7” adlı kitabın yazarıyım. Kitabım: https://www.seckin.com.tr/kitap/911934237
Özgeçmişim:
http://represent.io/mtkocak.pdf 
Websitem:
http://mynameismidori.com

Facebook hesabımı neden sildim?

Neden siz de silmelisiniz?

Şurdan yapılıyor: https://m.facebook.com/account/delete

Not: Facebook connect’iniz var diye kapatamıyorsanız, genelde sitelerin ayarlar kısmından değişiyor. Face’nizi kapatsanız bile, o siteler sizin faceye kayıt olduğunuz mail adresinizi kaydediyorlar, parolamı unuttum diyince de parola sıfırlama maili geliyor.


Facebook hesabımı sildim. Deaktive etmedim. Hesabımı dondurmadım. Sildim. Bunaldım çünkü Facebook’un gereksizliğinden ve bayağılığından. Oturup da telefon numarana bir mesaj atmak için 2 dakikasını ayırmaya üşenecek kadar sana değer vermeyen insanlar “arkadaş” adı altında duruyorlar ve senin yazdıklarını, duygularını, düşüncelerini gözetliyorlar, üstelik facebook, yazdıklarımdan, paylaştıklarımdan bir sonraki alışverişimin ne olduğunu dahi tahmin edebilecek kadar benim hakkımda benden daha fazla bilgiye sahip oluyor.

Facebook’un beni benden daha çok bilmesini istemiyorum.

Facebook’un bizi bizden daha çok bilmesi, veri madenciliği teknikleri kullanarak bizi alınıp satılan bir meta haline getirmesi ve hakkımızda derin makina öğrenme algoritmaları kullanarak, beğendiğimiz birşeyden, yorum yaptığımız herhangi bir şeyden, azınlık raporu filmindeki gibi, olasılıksal çıkarımlar yapabilmesinden olan rahatsızım.

Başa koyduğum link biraz da bu duruma olan huzursuzluğumdandır. faceyi dondurmak için tıkladığınızda, facenin bilmem kim sizi özleyecek, aman dondurma logout ol vb deyip, hesap silme linkini de zar zor bulunan bir yere koyması veya huzursuz edici bir şekilde insan psikolojisini kullanarak manipülasyon yaparak duygu sömürüsü yapması, ne kadar profesyonel veya kurumsal bir yaklaşımsa, benim bu yazıdaki sertliğim veya amatör tarzım bundandır aslında.

Bu nedir yani şimdi?

Son zamanlarda privacy, veya özel hayatın gizliliği konularında dünyada yaşanan tartışmaları benim buradaki huzursuzluğumdan ayrı görmemenizi dilerim.

Faceyi haber almak için de kullanmıyorum:

Haber paylaşımlarına da gıcık kapmış durumdayım. Çoğunlukla bir olay olduğunda sansürsüz vahşet videosu veya görüntüler, çoğunlukla yalan haberler ve genellikle kötü haberler görüyorum. Şu linkte haber sitelerine girmeyi neden bıraktım diye anlatılmış ki o yazıya da katılıyorum: http://www.raptitude.com/2016/12/five-things-you-notice-when-you-quit-the-news/ Bunun yerine olaylardan haberdar olmak için makale okuyormuş. Hem daha kaliteli, hem de insanın kültürü artıyor diyor.

Bir de böyle sürekli değişen hava durumu gibi bi fanatiklik akımları oluyor. Profilini türk bayrağı yapmalar, #suruç yazıp yanına karanfil resmi koymalar, kınamalar, gerçek bir adım atmaktansa, daha çok kendi kendimizi rahatlatarak kandırdığımızı düşünüyorum. Sağcı solcu farketmiyor bunun için.

Faceyi yeni tanıştığım veya kaybetmek istemediğim insanları bulmak için de kullanmıyorum

Yurtdışındaki insanlara genelde whatsapp’ımı veriyorum gerçekten önemliyse zaten telefondan mesaj atabilir, ya da mail atabilir. Genelde tanıdık dediğimiz insanlar, bıraksam bana 10 sene de mesaj atmayacakları için, olsalar da olur olmasalar da olur. Sevmediğin akrabalara sahip olmak gibi bişi. Yani, zor durumdayım, şurda kaldım diyecek olsan, o seviyedeki insanlara kendin rica etmeye çekinirsin. Ama mesela facemizde 400–500 kişi olunca zannediyoruz ki çok popüleriz.

Kırmızı bildirim bağımlılığı

Bir de kırmızı notification şeysi var. Şu kişi ekledi, bu kişi mesaj attı, bu kişi like’ladı gibi. Bu tamamen beyindeki dopamin reseptörünü etkiliyor ve sahte bir başarı duygusu veriyor. Bir resim attığın zaman insanlar bunu beğeniyor, mutlu oluyorsun, beyin oradaki numaraya göre mutluluk hormonu salgılıyor. Ama bu hiçbir emek gerektirmeyen ve kısa süren saçma bir tatmin biçimi. Şekerli tatlı veya sütlü çikolata ile beslenmek gibi. Bu konuda da facebook beynimizin bu özelliklerini kullanarak, manipüle ederek kullanıcı arayüzünü geliştiriyor ve algoritmalar ile bize kendine en çok kar ettirecek içeriği gösteriyor. Bunları kendi arkadaşlarımız paylaşsa dahi, herşeyi göremiyoruz. İşte bu manipülasyon olayına tahammül edemiyorum ve çok kızıyorum, facebook üzerinde istediğim içeriği seçme sansım yok, tek tek bütün arkadaşlarımı takibe almalıyım ki herşeyi göreyim, ancak bu sefer de aşırı bildirimler gelirdi. Şurada konuyla ilgili bir makale var.


Facebook masum bi site olsaydı, zaten beynin zayıf noktalarına oynamazdı.

O yüzden her sene yaptığım gibi hesabımı sildim, umarım bir daha da açmam. Ayrıca Facebook ve twitter, özlerinde mikro-blog uygulamalarıdırlar. Normalde oturup yazı yazacağım fikir belirtmek için araştırma yapman gereken bir konuda, minicik bir paragrafla veya 140 karakterle sınırlısın. Yazdıklarında öz olmayan kişiler de yazmaktan duyacakları tatmini yaratacağı etkiye bağladıklarından, tutup en itici, en korkunç, en vahşi, en sinir bozucu şeyleri paylaşmakta dahi beis görmüyorlar. Şahsen etrafımızda hijyenik bir mesafe yaratmam gerektiğini düşündüm artık. Çok açık ve çok duygusal, ama belli bir derinliği olmayan 140 karakterler veya bir paragrafta sosyal medya abur-cuburu olarak tükettirmek istemiyorum kendimi.

Tabii ki iç dünyamızı başka insanlarla paylaşabiliriz, eksikliklerimizi, yoksunluklarımızı, utançlarımızı, aptallıklarımızı açık edebiliriz. Öyle olmasa Dostoyevski’nin Yeraltından Notları olmazdı mesela. Ama işte bunları anlama kapasitesi 140 karakterden ibaret olan, duygusuz, haysiyetsiz trollere ya da empati yoksunu kendini beğenmiş insan müsvettelerine minik bi paragraf içerisinde, hiçbir emek vermeden elde edebilecekleri bi çerez olarak sunmalı mıyız? Bu beni uzun süreden beri rahatsız eden bir konu. Hayatı tamamen eğlenceden, paradan, başarıdan ve güzel vakit geçirmekten ibaret sayan, yaptığı işlerden hızlıca bir geri bildirim, duygusal tatmin bekleyen, arkadaşlık ve sevgili ilişkilerine gereken emeği özveriyi vermeyen, emek vermeden, hiçbir şey yapmadan, üretmeden, sevmeden, saygı duymadan sadece tatminler üzerine kurulu bir dünyada yaşamaya alışmış bu insanlarla ne paylaşabiliriz ki?

Üstelik Facebook gibi mikro-blog sitelerinde çok vakit geçirmenin depresyona yolaçtığı bilimsel olarak kanıtlanmış birşey. Calm Technology (Sakin Teknoloji) kitabının yazarı Amber Case, Budapeşte’deki CRAFT 2016 konferansında, facebook kullanımının depresif etkisinin özellikle istendiğini, çünkü yapılan başka bilimsel araştırmalara göre depresyondaki insanların daha çok alışveriş yaptıklarını ve reklamlara daha çok tıkladıklarını belirtmişti. Yani sosyal medyada daha çok zaman geçirip, insanları onların isteği ile röntgenlediğimizde daha da aptallaşıyoruz. Teknolojinin insan sağlığına yararlı olması gerek. Zararlı değil.

Ben teknik kitap yazarıyım biliyorsundur belki, video izlemeye tahammül edemiyorum, video izlerken metni gözlerimle taradığım gibi hızlı tarayamıyorum. Ekranda donan kare bir sonraki paragraf’a göz ucuyla dahi bakmama izin vermiyor. Bu nedenle yazı okumayı ve yazmayı tercih ediyorum. Özellikle uzun metinlerin böyle bir avantajı var. Bu yazdığım teknik yazıları facebook veya twitter üzerinden de paylaşıyorum ve yorumlar, çok uzun yazmışsın, kitap yazaydın, okuyamıyoruz gibi eleştiriler oluyor. Ben masamda duran bilmem kaç bin sayfalık kitapları okuyamadığım için her gün suçluluk duygusu çekerken, adam 1 paragraftan fazlasını okuyamıyor. Bana kimse vaktim yok demesin, dünyanın en aptal troll videolarını izlemeye, face yorumları altında paragraflarca kavga etmeye herkesin nedense vakti var.


Projelerle PHP 7

Ben Mutlu Koçak, Bilgisayar Mühendisiyim, ZCPE Sertifikasına sahibim ve “Hiç Bilmeyenler İçin İnternet Programlamaya Giriş — PHP 7” adlı kitabın yazarıyım. Kitabım: https://www.seckin.com.tr/kitap/911934237
Özgeçmişim:
http://represent.io/mtkocak.pdf 
Websitem:
http://mynameismidori.com

Hiç bilmeyenler için 7 soruda Yazılım Geliştirme


1. Yazılım yapmayı öğrenmek istiyorum ama hiçbirşey bilmiyorum. Nereden başlamalıyım?

Öncelikle özellikle kızlarda gördüğüm sounu anlatarak başlayayım. Genellikle yazılım erkek işi olarak görüldüğü için, yazılım mühendisliği okusalar dahi kadın arkadaşlarda bir çekingenlik oluyor. Hatta mezun olan kadın arkadaşlar kodlamadan çekindikleri için yönetici, test uzmanı, analist gibi pozisyonlarda çalışıyorlar.

Yazılım geliştirme erkek işi falan değildir arkadaşlar.

Margaret Hamilton Apollo uzay aracı için yazdığı kaynak kodu ile

Bilinen ve kabul edilen ilk programcı Ada Byron Lovelace isimli bir kadındır. Hatta aya giden Apollo uzay aracının uçuş kontrol yazılımını Margaret Hamilton adındaki bir kadın yapmıştır ki daha geçenlerde kendisi Beyaz Saray’da Obama’dan madalya aldı. Hatta ince detayların farkına varmadaki aşinalığımız sayesinde biz kadınlardan çok iyi yazılımcılar çıkar. Zaten 1980’lere kadar bilgisayar ve yazılım işleri daktiloculukla eşdeğer görüldüğünden bu alanda daha çok kadınlar hakimdi. Daha sonra parası, vb’si nedeniyle erkek mesleği olarak görülmeye başlandı. Yine geçenlerde yapılan bir araştırmaya göre, Github üzerinde kadınların yazdıkları kod, (profillerinde cinsiyetleri belli değilse) daha çok kabul görüyormuş. Ama, eğer cinsiyet belliyse, önyargı nedeniyle kodlar daha çok inceleniyormuş. Yazılım alanındaki cinsiyetçilik ayrı bir yazı konusu tabii.

Dünyanın ilk programcısı Ada Lovelace

Herşeyin başı merak etmek. 2011 yılında Manchester’da katıldığım CakePHP konferansında uzmanlara nasıl başladınız diye bir soru sormuştum. Hiç unutamadığım bir konuşmacı Starbucks’ta barista (Kahve yapan yeşil önlüklü) olduğunu, bir arkadaşının yazılım geliştirmeden iyi para kazandığını, kendisinin de bunun üzerine internetten tutorial yani adım adım öğretici materyal okuyarak işi öğrendiğini anlattı. Bu adam şu anda CakePHP konusunda dünyadaki en ünlü uzmanlardan biri. Dinleyenler arasındaki biz yazılım mühendisleri vb’ler olarak topluca ambale olduğumuzu belirtmeliyim.


Yazılım geliştirmek, halı dokumak, resim yapmak gibidir. Bilince aynı keyfi alırsınız. Yazılımcı olmak için süper matematik bilmek lazım dahi olmak lazım diye birşey de yok arkadaşlar. Hatta matematikle ilgili sorunumuz, matematiğin mantığını bilmemekten kaynaklanıyor. Matematik aslında kolaydır, hayatı resmeden boya kalemidir. Yaptığımız, beynimizle verdiğimiz her karar aslında, halen bilim olarak çözemediğimiz (Yapay sinir ağları) bir matematiğin ürünüdür, her birimiz, en gelişmiş bilgisayarlardan daha ileri bir araca sahibimiz. Yani beynimize. Bir de, sanmayın ki yazılım alanında herşey olmuş bitmiş, bütün konular araştırılmış ve teoriler ispatlanmış ve standart hale getirilmiş. Binlerce yıllık Tıp bilimine veya atıyorum Jeolojiye, fiziğe, biyolojiye baktığımızda bile oturmuş çalışan işe yarayan teoriler görürüz. Yazılım alanında böyle birşey henüz yok arkadaşlar. Standartlar henüz çok yeni, sürekli bir gelişme ve icad edilme halindedir yazılım bilimi. Şu anda kullandığımız algoritmalar 1950’lerde vb, icad edilmiştir ve henüz 50 küsür yıllık bir geçmişi vardır. O yüzden kendinizi eksik hissetmeyin.

Yazılım alanında pir ya da guru, ultra özgüvenli süper uzman olmak diye birşey de yoktur arkadaşlar. Çoğu zaman hiçbir şey bilmeden taptaze bilgilerle işe başlamak, bir konuda uzman olmaktan iyidir. Mesela ben sahip olduğum PHP uzmanlığını korumak için sürekli okumalıyım ve sürekli yeni sürümlerde çıkan yeniliklerle bilgimi taze tutmalıyım.


En önemli konu ise yaparak öğrenmek, birşeyler yapmak. Küçük küçük projelerle başlayın. Mesela kendi internet sitenizi yazmaya çalışın. Kötü de olsa deneyin, mükemmelliyetçi olmayın. Türkçe kaynak sorunumuz var evet, çünkü kaynaklarımız henüz çok yeni, çoğu ingilizceden kelime kelime, kullanım klavuzlarından yazılım bilmeyen insanlar tarafından çevirilmiş yayınlar. O kişilerin emeklerine saygı duyuyorum fakat konunun temel mantığını anlamak konusunda daha çok Türkçe yayınlara ihtiyacımız var ki ben de bu yüzden yazıyorum.

Bir de kullanım klavuzundan dil öğrenilmez arkadaşlar. Kullanım klavuzları veya A’dan Z’ye bir konuyu anlatan kitaplar, zaten belirli bilgileri olan kişiler için yazılmışlardır. Profesyonel bir şekilde yazılım geliştirirken, herşeyi ezbere bilemeyeceğimiz için başucu kaynaklarına, rehberlere ihtiyacımız vardır. Bu kitaplara, bir konuda takıldığımızda başvururuz. Ancak hiç bilmiyorsanız, “User Manual” yani kullanıcı klavuzları sizi yorar. Bunun yerine, basit bir konuyu, örneğin, HTML öğrenmek istiyorsanız, konuyu bebek adımlarıyla anlatan, mesela kendi kişisel internet sitenizi yapmanızı öğretecek, tutorial yani öğreticilerle işe başlamanızı, temel mantığı kavradıktan sonra detaylara inmenizi öneririm. Öğreticilerle (Tutorial) ile bilgili bir diğer sorun da, genellikle hiçbir işe yaramayan, saçma sapan örnekler üzerinden gitmeleri. Ben, şahsen, makalelerimde, işe yarayacak, okuyucuyu heyecanlandıracak, az da olsa kendine güvenmesini sağlayacak profesyonel olarak para kazanbileceği örnekler vermeye çalışıyorum. Projelerle PHP 7 kitabındaki, Kızılyıldız Matbaacılık, şirket internet sitesi yapma örneği bunun içindi mesela.

2. İlk olarak neleri bilmeliyim?

Bildiğimiz gibi, bilgisayarlar belli komutları alarak işleyen cihazlardır. Bir program da bu komutların bütünüdür. Bilgisayarların ortaya çıktığı ilk zamanlarda komutlar ard arda cihaza girilerek sonuç elde ediliyordu. Buna imperative programming yani emirli programlama deniyor. Tıpkı bir hesap makinesi gibi düşünebiliriz. Ancak ayrı ayrı programları farklı işlemler için tekrar tekrar yazmak gerekiyordu. Bu yüzden yazılımcılar bu programları düzenlemek için belli yapılara ihtiyaç duydular. Bunlardan ilki metod, işlev veya fonksiyon adını verdiğimiz, giriş değişkenleri ve döngü değeri olan yapılardır. Sadece bu yapılara dayalı olan programlamaya da Fonksiyonel programlama adı verildi. Smalltalk’ın kurucusu Alan Kay 1960’larda biyolojiden ve canlı hücrelerden esinlediği object yani nesneler sistemini önerdi. Buna göre bir nesne en basitinden ortak değişken ve metodlara sahip olan kod yapıları olarak tanımlanabilir.

3. Hangi dille başlamalıyım?


Bu soru çok geliyor. Neredeysa alfabenin harfleri kadar çok dil var. Şu dil daha üstündür, C, Javascripti döver diyen adam cahildir arkadaşlar. Nasıl çorba kepçesiyle, çorba içmeye çalışmıyorsak, ya da saatçi tornavidasıyla, duvar delmeye çalışmıyorsak, her dilin kendine ait bir kullanım amacı vardır. Benim hiçbilmeyen bir kişiye tavsiyem HTML, internet sayfası yazmaya yarayan dil ile başlamasıdır. Bu minik kişisel siteyi yaptıktan sonra ihtiyacınız olan ek özelliklere göre, CSS, JavaScript, PHP, Ruby, Python gibi dillere doğru zaten kendiniz yolalırsınız.

Algoritma, veri yapıları, nesne yönelimli programlama gibi kavramları bildiğinizde hangi dili bildiğinizin önemi pek yok. Google veya FB gibi büyük şirketler sınavlarında sadece algoritma ve veri yapıları soruyorlar. Bi kaç tanesine girdim, Microsoft’unkini de geçtim ordan biliyorum. Ben PHP uzmanı olduğum için (Zend Sertifikasına sahibim) ve web yazılılmları alanında kendimi geliştirdiğim için PHP anlatıyorum, ama mesela son bir senede Objective-C, Java ve Haxe gibi dillerle proje geliştirdim ve sorun yaşamadım. Bir de şu dil iyidir, bu dil iyidir gibi bir olay mevcut değil. Mühendsilikte iyilik kötülük olmaz, ihtiyacınıza göre en verimli olanı kullanırsınız. Mesela Raspberry Pi 1.2 Ghz bir işlemciye sahip ve atıyorum hayvani bi 3D oyunu çalıştırmaz, zaten ondan da onu beklemeyiz. Böyle düşünün.

Değinmek istediğim bir diğer konu ise algoritmalar ve veri yapıları. Bilgisayar Mühendisliğinde en lanet, en zor dersimizdi. Çok zorlanıyorduk. Aslında zor bir konu değildi ama çok emek istiyordu. Okul bittikten sonra Google’ın sınavında sadece bu konuyu sorduklarını gördüğümde o dersin değerini anlamıştım. Google, Microsoft, Facebook, Amazon gibi büyük şirketler eleman alırlarken, sadece algoritma ve veri yapıları sorarlar arkadaşlar. Çok emek ister, çok çalışma ister ama yapılmayacak birşey değil. Bu şirketlerde çalışan kişiler de sizin bizim gibi insanlar ve bir şekilde oralara gelmişler. Siz niye yapamayasınız? Tabii ki de yapabilirsiniz.


En son ve en önemli önerim de kesinlikle İngilizce. İngilizce’yi ne yapıp, ne edip öğrenmelisiniz. Tabii ki bir konuyu en kolay şekilde anlamanın yolu anadilinizden okumak, fakat yazılım zırt pırt diye iki ayda bir herşeyi değişen bir alan olduğu için, dünyadaki yeniliklerden haberdar olmanın en kolay yolu, İngilizce kaynakları takip etmektir. İngilizce zor bir dil değil ayrıca arkadaşlar. Dünyanın en kolay gramerine sahip, tüm bilimsel yayınların yapıldığı dildir. İngilizce öğrenmeye mecbursunuz.

Sonuç olarak, biraz merak, biraz araştırma duygusu, biraz özgüven ile başaramayacağınız birşey yok. Aklınıza takılan bir konu olursa da, internet yani tüm insanlığın bilgisi elinizin altında, yine bulamazsanız, buyrun bana sorun ben anlatayım.

4. Sıfırdan öğrenmek için makul bir uğraş mıdır? Yoksa nafile bir çaba mi olur hiç bilmeyen biri için?

Yazılım öğrenirken hiç bilginiz olmaması daha iyidir. Çünkü öğrenip derinleştiğiniz konu 1 sene içinde eskimeye başlar. O yüzden yeni öğrenen daima taze bilgiyle işe başlar. Sıfırdan öğrenmek için makul bir uğraştır. Programlamayı resim yapmaya benzetebiliriz. Uğraştıkça, projeler yaptıkça gelişir. Sadece konunun temel mantığını iyice oturtmak gerekir. Temelleri kavradığınızda daha zor işleri de tek tek halledersiniz. Bir konferansta (2011’de Manchester’da cakePHP konferansı) nasıl başladıınız diye sormuştum panelistlere, elemanın biri Starbucks’ta barmendim, bi arkadaşım iyi para kazanıyordu ben de merak ettim başladım dedi. Dinleyenler falan da mühendis hep, bize anlatıyor işin inceliklerini. Genelde, yazılımcılar biraz kasarlar, yani işte yaptığımız iş çok zor vb havalarında gezerler. Bu havalar genellikle konunun derinliklerine inildikçe söner, çünkü yazılımcılık bitmeyen bir uğraştır, resim çizmek gibidir, teknik kuralları vb. vardır ama öğrenilebilir. Bu yüzden hiç bilmiyorum diye çekinmeyin.

5. Nesne Yönelimli Programlama ne işimize yarar? Öğrendiğimizde neler yapabiliriz?


Nesne yönelimli programlama öğrendiğimizde, uygulama geliştirmek bizim için daha verimli hale gelir. Mesela meyve sebze yetiştirdiğinizi düşünün, eğer nesne yönelimli programlama kullanmazsanız, tarlanızda domatesler lahanalar biberler karmakarışık olur. Bunun yerine domatesleri bir tarafa, lahanaları bir tarafa yerleştirirseniz, tarlanızdaki sebzeleri daha rahat yönetirsiniz. Bu yüzden yapısal olmayan kodlara biraz da aşağılamak için “Spagetti kod” denir, kodu okuyan size küfreder. Konunun tam mantığını anladığınzda, örneğin Java öğrendiyseniz, C benzeri başka bir dili öğrenmek ve yapıları anlamak sizin için çocuk oyuncağı haline gelir. Nesne yönelimli programlamayı kullanarak, bir çok platformda çalışan mobil uygulamalar, web portalları, içerik ve diğer yönetim sistemleri, web siteleri geliştirebilir, kodlarınızı diğer kişilerle paylaşabailir, ve yeniden kolayca kullanabilirsiniz.

6. Algoritma Nedir?

Algoritmayı şöyle anlatabilirim. Mesela masada oturuyorsun ve masada bir bardak su var. Susadın ve suyu içeceksin. Önce gözünle masadaki bardak ile elin arasındaki mesafeyi ölçüyorsun,
sonra belli bir açıyla vücudunu eğeceksin, daha sonra yine tek tek hesaplanmış açılarla omzunu, kolunu dirsek ve bileğini büküp elini bardağa yaklaştıracaksın. Elini ve eklemlerini kullanarak bardağı tutacaksın. Suyun sıcak olup olmadığını kontrol etmen gerek tabi. Elindeki sinirlerle bunu hissedeceksin. Sonra bardağı belli bir kuvvetle tutman gerekiyor. Fazla sıkı tutarsan bardak kırılabilir. Fazla gevşek tutarsan bardak düşebilir ve sular yerlere saçılabilir. Bardağı belli bir mesafeye kadar kaldırman gerek. Ağzınla aynı seviyeye getirip kafanı da geri belli bir açıyla yatırarak suyu içmen gerekiyor ama tabi o sırada nefes almamalısın yoksa boğulabilirsin. Bardaktaki su bittiğinde aynı işlemleri yapıp bardağı tekrar yerine koyman gerek.
Gördüğün gibi, en basit masadaki bardaktan su içmemiz bile karmakarış bir algoritma, deli bir bilgisayar programı aslında. Ve biz bunun farkında değiliz.
Örneğimize geri dönersek; İki tane durum var susamış olma hali ve susuz olma hali. Birincisi başlangıç durumu. İkincisi de bitiş durumu. Amacımız susuz olma haline ulaşmak. Başta elimizdeki veriler
1. susama hissi
2. Masada gördüğümüz bir bardak su
İşlem süreci ise
1. Masaya doğru elimizle kolumuzla başımızla yaptığımız hareketler 
2. suyu içmemiz
Sonuç durumda da elde ettiğimiz durum
1. susuzluk hissi 
2.masada kalan boş bir bardak
Yani programın giriş durumu ve çıkış durumları başlangıcı ve bitişini böyle anlatabilirim. Programlama herkes içindir. Anlamadığım şey bilim değildir. Şu siteyi de incelemenizi öneririm: https://visualgo.net/

7. Model View Controller, MVC nedir?

Üstteki maddede PHP frameworklerinin MVC tabanlı olduğunu söyledik. MVC, Model, View, Controller kelimelerinden oluşur. Mantık olarak, bir yazılım bloğunun her işi yapması değil, belli sorumluluklara ayrılmış parçalara bölünmesi amaçlanır. Bu sayede yazılım hem daha kolay yönetilir, hem de hata düzeltmek daha kolay olur. Model verilerin kayıt edilmesiyle ilgilenen, (Persistence Layer) dediğimiz veri kayıt katmanıdır. Bunu bir yerdeki kütüphaneci veya arşiv memuru gibi düşünebilirsiniz. Controller dediğimiz (Business Layer), kontrolcü katmanını, vücuttaki beyin gibi düşünebilirsiniz. Beyin, gelen algılara göre tepkiler üretir. Mesela korkunç bir film izlediğimizde veya yüksek bir yere çıktığımızda, vücudumuza belli emirler verir, kalp atışlarımız hızlanır, bu sayede hayatta kalmamız kolaylaşır. View ise, sunum katmanıdır. (Presentation layer), yani modelden alınıp, kontrolcünün hesapladığı bilgileri, allayıp pullayıp süsler ve örneğin ekrana basar. Ayrıca görünüm-sunum katmanı sayesinde programı kullanan kullanıcıdan belli bilgileri de alırız. Örneğin, formları doldurur, bir butona basar gibi.


Projelerle PHP 7

Ben Mutlu Koçak, Bilgisayar Mühendisiyim, ZCPE Sertifikasına sahibim ve “Hiç Bilmeyenler İçin İnternet Programlamaya Giriş — PHP 7” adlı kitabın yazarıyım. Kitabım: https://www.seckin.com.tr/kitap/911934237
Özgeçmişim:
http://represent.io/mtkocak.pdf 
Websitem:
http://mynameismidori.com

Türkiye’de neden kalayım?


Metrobüste şortumuz yüzünden dayak yemek için mi kalalım? Yoksa hamile halimizle parkta spor yaptık diye saldırıya uğramak için mi? Maaşımızı aylarca ödemeyen çomar patrondan parayı yıllarca tahsil etmeyen devlet için mi kalalım? Yoksa otellere doldurulup yakılmak için mi kalalım? Şehirdeki son parkı savunduğumuz için dayak yemek için mi kalalım? Yoksa astımım var gaz atmayın dediğimiz için suratımıza sıkılan biber gazından ölmek için mi kalalım? Gelen polise galoş giyin dediğimiz için vurulup ölmek için mi kalalım? Yoksa her eylemi didik didik aradığı halde, çevre için, kadınlar için, barış için sesimizi çıkarırken, ya da sokakta yürürken patlamak için mi kalalım? işyerinde kadın olduğumuz için tacize ayrımcılığa uğramak için mi kalalım? Yoksa minibüse binip son durakta tek başına kaldığımız için tecavüze uğrayıp Özgecan gibi öldürülmek için mi kalalım? Ya da transız diye iş vermedikleri için, sex işçiliği yapıp, sonra da hande kader gibi yakılmak için mi kalalım? Trafikte şehir magandalarından dayak yemek için mi kalalım? Yoksa yaya geçidinden geçerken ezilip ölmek için mi kalalım? Otobüste tacize uğrayıp, itiraz ettiğimizde amcalar teyzeler tarafından kim bilir sen de kuyruk sallamışsındır denmesi için mi kalalım? Yoksa kocamızdan dayak yiyip sığındığımız devletin bizi koruyamaması, aile içi iştir karışmayız deyip ölümümüze göz yumması için mi kalalım? ne için kalalım?

Yurtdışında hayat zor ama türkiyeyi düşünmem bile. burda en azından benim gibi insanları koruyan ayrımcılık yasası var. kötü dahi olsa nefret suçlarına karşı önlem var.

En dandik, en boktan avrupa ülkesinde bile nefret suçları yasası var. en tırt avrupa ülkesinde araçlar yaya geçidinde duruyor, ezmiyorlar. o türkiyede kalın diyen sahibi bana gelsin de iki çift lafım var ona.

Demem o ki, avrupa’da yaşamak, türkiye’de kadın olmak, lgbt olmak, aydın olmak, okumuş olmaktan kolay.

Şu yazı: https://medium.com/@ordaneisivarmis/turk-milleti-ve-sikinin-ucuyla-i-s-yapmak-gerce-i-e7b170699056#.a712v86d1


Projelerle PHP 7

Ben Mutlu Koçak, Bilgisayar Mühendisiyim, ZCPE Sertifikasına sahibim ve “Hiç Bilmeyenler İçin İnternet Programlamaya Giriş — PHP 7” adlı kitabın yazarıyım. Kitabım: https://www.seckin.com.tr/kitap/911934237
Özgeçmişim:
http://represent.io/mtkocak.pdf 
Websitem:
http://mynameismidori.com

Türkler için 10 adımda Prag Rehberi


1. Prag’a nasıl geliriz?
Türk Hava Yollarının ve Pegasus’un seferleri oluyor. Pegasus Thy’ye göre daha ucuz ama Sabiha Gökçen’den kalkıyor. Bazen 3’te bir fiyatına kadar düşüyor biletler. Onun dışında Viyana’dan ve Budapeşte’den trenle de gelebilirsiniz. Zaten genellikle Viyana Budapeşte ve Prag turları oluyor. Viyana ve Bratislava’da yakın.
Tren genellikle pahalı (Ben tren tercih ediyorum, otobüs benim midemi tutuyor), otobüsler konforlu, eğer otobüs yolculuğuna alışkınsanız. Otobüs biletlerine goeurodan bakılıyor. Çeklerin otobüs firması temiz ve ucuz. Student-Agency, Almanya’dan Flixbus ve Frans’da OuiBus firmaları geliyor. Biletler genellikle 15–35 euro gibi şehire göre değişiyor. Havalimanından şehire ekspress otobüsler oluyor belirli saatlerde onları öneririm.


2. Vize nasıl alırız?
Çek Konsolosluğu en zor vize veren konsolosluk. Tüm belgeleri tam olduğu halde red alanlar varmış. Belgelerin eksiksiz olmasına dikkat edin. Genellikle Kredi kartı ekstresi, hesapta para, ana babaya ait tapu, öğrenci iseniz öğrenci belgesi ve transkript, mezunsanız diploma isterler. Konsolosluğun sitesinde yazar. Belgelerinizin eksiksiz ve doğru şekilde doldurulmuş olması çok önemlidir.


3. Neye dikkat etmeliyiz?
Paranızı asla sokakta bozdurmayın. Havalimanında merkeze gidebilecek 20 euro vb bozabilirsiniz. Sokakta hem düşük bozarlar hem komisyon yok derler ama alırlar. Dikkat etmezseniz fena çarparlar. 1 euro normalde 26 veya 27 kron olduğu halde 17ye bozdurmuş Türk çift gördük ve kötüydü. Paranızı Astronomik saate yakın Parizska Caddesi 5 numarada bulunan Euro Gold Centre’de bozdurun, bir Türk işadamına ait, elinizde kalan kronları da bozduğunuz fiyata geri alıyorlar.

Toplu taşıma kullanın. Neredeyse her sokakta tramvay var. Metro’da çok yaygın. Gece tramvayları da var ama saatlerini kontrol edin, gece tramvayları çok aralıklı olabiliyor. Bekleyemem, çok üşüdüm derseniz de sokaktan taksiye binmeyin. Yoldan taksi çevirmeyin. Uber veya yoksa 226 000 226 Nejlevnejsi (en ucuz) taksi hizmetini kullanın. Toplu taşımaya ASLA kaçak binmeyin. 24Kc’lik yarım saatlik bilet alın, girerken damgalatın. Kaçak binersenzi 800Kc cezası var ve hiç affetmiyorlar.

Tramvay, otobüs ve metro saatlerine şurdan http://spojeni.dpp.cz/ConnForm.aspx?tt=PID&cl=E5 ve google maps üzerinden ulaşabilirsiniz.

Bilmediğiniz Bara gitmeyin, sokakta sizi çevirip şurası iyi götüreyim diyen (özellikle siyahiler) kişilere güvenmeyin. Her zaman trip advisor’dan gittiğiniz mekanın puanını kontrol edin. Turistleri sex turizmi ayağına rehin aldıkları oluyormuş. Dikkatli olun. Barlarda olay çıkarmayın, cüzdanınıza çantanıza dikkat edin, polis ilgisiz ve umursamaz.


4. Ne zaman gidilir.


Prag yılın her anı sokakları turistle dolu bir şehirdir. Özellikle şu an, 24 aralık Noel gecesine kadar bütün şehir masal kenti gibi. Heryerde minik noel marketleri var. Buralarda Sosis (Domuzdur dikkat), Langoş (Sarmısaklı domatesli kızarmış macar ekmeği) alabilirsiniz. Genelde Mayıs ayı en güzel ayıdır. Ama bence her hali güzel.


5. Yeme, içme ve hayat kalitesi nasıl? Ucuz mu? Ne yenir ne içilir?
1 Euro 27 veya 26 çek kronu yapıyor. 20 Krona bira içebilirsiiz. İyi bir yemeği de 150 krona restoranda yersiniz.


Yeme içme Türkiye’ye ve hatta diğer avrupa ülkelerine göre çok daha ucuz. Dünyanın en kaliteli birasını üretiyorlar ve biralarıyla gurur duyuyorlar, ismi Pilsner Urquell, Çek Cumhuriyetinin Pilsen şehrinde üretiliyor. Dünyadaki bütün Pilsen bira isimlerini bu şehirden alıyor. Hatta Efes Pilsen her sene bu yüzden çeklere lisans ödüyormuş. Dünyadaki en ucuz bira da burada üretiliyor, 0.04 Euro. Sudan daha ucuz ve kimse nasıl olduğunu bilmiyor. Ben denemedim ama köpek öldüren kıvamında olacağını tahmin ediyorum. Yemekleri ve mutfağı kötü. Gelmişken yiyelim derseniz, Gulaş ve Ördek eti dışında kalbur üstü bir yiyecekleri yok. Türk Restoranlarını unutun. Hepsi berbat. En acayip yemekleri Tatarsky Biftek, yanında çiğ yumurta, çiğ soğan, çiğ sarmısak ve baharatlarla servis edilen çiğ kıyma. Kızarmış ekmeğe sürüp biranın yanında yeniyor. Kokoreçe benzer bir hazzı var.


Turistik yerler dışında, yerel insanların takıldığı köşe pubları iyidir. Merkezde Mincovna, Krcma, Mlejnice, Pivrince iyidir. Ayrıca Kolkovna adı verilen özel restoranları var. Yukarıda bahsettiğim Plsner Urquell biralarının restoran zinciri. Ayrıca 2 numaralı bira olan StaroPramen Birasının da Potrefena Husa adı verilen şehrin değişik yerlerinde bulunan restoranları var.

Çok ilginç bir deneyim olarak Vytopna adlı yemeklerin içeceklerin model trenlerle servis edildiği bir yer var. Çocuklarınızla geliyorsanız harika bir eğlence olabilir. Ayrıca çocuklar için Království železnic adlı oyuncak tren müzesi ve lego müzesi öneririm.

Kıyafetler pahalı ve hepsi Türkiye’de üretiliyor zaten. Onun dışında kamp malzemesi, doğa yürüyüşü delisi insanlar oldukları için çok yaygın ve uyguna da bulunuyor. Hudy markasının mağazaları var onları da öneririm.



Milli içkileri Biradır. En iyi markaları Pilsner Urquell, Gambrinus ve Straopramen’dir. Krusovice de iyidir. Kendi birasını üreten restoranlar vardır çok ilginçtir Biri U Medvidku, diğeri de U Fleku’dur öneririm. Bunun dışında bizdeki ocak başı konsepti gibi The Pub adı verilen (Pilsner Unique Bar) adı verilen her masada Bira Çeşmesi olan bir restoran pub vardır. Şiddetle öneriyorum. Şehirde 30 40 çeşit birayı tadabileceğiniz Bira müzesi adlı pub’lar da mevcut ama pek matah bişi değil. Zaten bütün heryerde biralar güzel.


Bunun dışında Absinth hediyeliktir tadımlıktır yeşil peridir bir shottan fazla içmeyin hatta hiç içmeyin. (Alkol komasına girmişliğim var, hastanede uyandım) Bir başka hediyelik de Bechorvka Likörüdür. Jager’i andırır. Karlovy Vary’de müzesi var öneririm.

6. Hediyelik ne alınır?
En önemli hediyeliği tahta oyuncaklar ve kuklalardır. Yukarıda para bozmanızı önerdiğim yerde ayrıca magnet gibi ucuza hediyelikler de satılıyor. Adımı söylerseniz size railci indirimi de yaparlar 🙂 Bunun dışında çeklere özgü lal taşı hediyelikler de alınabilir aynı yerden. Japonların en sevdiği marka doğal kozmetikler ve ürünler satan Botanicus, ve biralı şampuan ve yüz kremi alabileceğiniz Manufaktura öneririm. Onun dışında sokaktaki standar hediyelikçiler pahalı olur genelde.


7. Nerelerde gezilir
Zorlarsanız 1 günde heryeri gezersiniz. Benim için klasik rota Mustek metro durağından inip Vaslavski Meydanından aşağı StaroMestska (EskiŞehir) bölgesine yürümek. Meydan ünlü 1968 olaylarının yaşandığı yer. Burdan sonraki durağınız Astronomik Saat olsun, saatbaşında kuklalar çıkar ve hareket ederler. Hep onu bekleyen çinli turistler daima oradadır. Eski şehir meydanı yani StaroMestska Meydanı bence dünyanın en güzel yeridir. Buradan Karlova Sokağı üzerinden heykelli köprüye doğru gidin. Bol bol resim çekin. Ayrıca Slovansky Dum ve alışveriş yapmak istiyorsanız Celetna sokağı üzerinde Palladium alışveriş merkezine gidebilirsiniz. Ertesi gün Kampa müzesi, Kafka müzesi ve MalaStrana yani küçük mahalleden veya (Hradcanska metro durağıdan) kaleye gidebilirsiniz. Kaleden de enfes manzaraları çekersiniz ve Prag biter. Ayrıca Narodni Divadlo yani altın kaplı çatısı olan Ulusal Tiyatro ve karşısındaki Slavia Cafe’yi kaçırmayın. Nazım Hikmet çok takılırmış buraya hatta içinde resmi de var. Ünlü Abisnt Yeşil Peri tablosunun orjinali de bura. Prag’ı bitirdikten sonra masallar ve rüyalar şehri olan Cesky Krumlov, Atatürk2ün tedavi gördüğü kaplıcalar şehri Karlovy Vary ev eğer doğa istiyorsanız Usti Nad Labem yakınlarındaki Çek İsviçresi bölgesine gidebilirsiniz. Kanyonlar ve inanılmaz bir doğa var.


8. Nerelerde gezilir
Zorlarsanız 1 günde heryeri gezersiniz. Benim için klasik rota Mustek metro durağından inip Vaslavski Meydanından aşağı StaroMestska (EskiŞehir) bölgesine yürümek. Meydan ünlü 1968 olaylarının yaşandığı yer. Burdan sonraki durağınız Astronomik Saat olsun, saatbaşında kuklalar çıkar ve hareket ederler. Hep onu bekleyen çinli turistler daima oradadır. Eski şehir meydanı yani StaroMestska Meydanı bence dünyanın en güzel yeridir. Buradan Karlova Sokağı üzerinden heykelli köprüye doğru gidin. Bol bol resim çekin. Ayrıca Slovansky Dum ve alışveriş yapmak istiyorsanız Celetna sokağı üzerinde Palladium alışveriş merkezine gidebilirsiniz.

Vaslavski Namesti meydanındaki büyük müze tamirde, ek hizmet binasında hizmet veriyor şu an ismi de narodni muzeum. Ayrıca sanatla ilgilyseniz National Gallery yani Veletrzni Palac görünüz. En önemli eserlerinden biri art nouveau sanatçısı Mucha’nın slav epic tablosudur. Görmeden geçmeyin.

Ertesi gün Kampa müzesi, Kafka müzesi ve MalaStrana yani küçük mahalleden veya (Hradcanska metro durağıdan) kaleye gidebilirsiniz. Kaleden de enfes manzaraları çekersiniz ve Prag biter. Ayrıca Narodni Divadlo yani altın kaplı çatısı olan Ulusal Tiyatro ve karşısındaki Slavia Cafe’yi kaçırmayın. Nazım Hikmet çok takılırmış buraya hatta içinde resmi de var. Ünlü Abisnt Yeşil Peri tablosunun orjinali de bura. Prag’ı bitirdikten sonra masallar ve rüyalar şehri olan Cesky Krumlov, Atatürk2ün tedavi gördüğü kaplıcalar şehri Karlovy Vary ev eğer doğa istiyorsanız Usti Nad Labem yakınlarındaki Çek İsviçresi bölgesine gidebilirsiniz. Kanyonlar ve inanılmaz bir doğa var.

Prag Nehir Turu için Jazz Boat öneririm, 2 saat hem nehir turu, caz müziği ve harika bir yemek yersiniz. Onun dışında Letna Park, Eski stalin heykelinin olduğu Metronom, Petrin’deki çakma eyfel kulesi, füniküler, john lennon duvarı ve aşıklar köprüsü yorumlardan gelen ayrıca öneriler.


9. İnsanlar nasıl
Kadınlar teklif etmiyor ama çok güzeller, hepsi uzun boylu sarışın ve mavi gözlü. Asla kimse kimseyi taciz etmiyor. Sokaklar kadınlar için şansınızı çok aşırı zorlamadığınız sürece güvenli. Erkekler için, barda tanıştığınz, sizinle danseden hatta öpüşen kadın, sevgilim şurda sana güle güle diyebilir, bozulmayın. Hatta olay çıkarmayın. Kadınlar koruma altında, yabancılara karşı dost canlısı bir halk değiller. Bu yüzden polisin de tavrı herhangi bir olayda aynı şekilde olacaktır. Yerel halka kibar ve saygılı olmaya dikkat edin. (Dekuju) teşekkür ederim demektir. Bir yerden çıkarken de (Na shledanou) güle güle denir. Halkının dost canlısı olmamasının tarihsel sebepleri var. Yıllarca işgal altında kalmışlar. Özellikle bu dönem islam ve yabancı düşmanlığı var. Halkın hepsi öyle değil, cahil kesimi ve yaşlılar böyle şeylere inanıyorlar. Ama dünyanın en umursamaz milleti de denebilir. Kimse kimseye karışmaz. Ancak bahçesindeki bütün elmaları verip çuvalla bizi eve gönderen inanılmaz iyi kalpli pansiyon sahibi de gördüm. Çok zengin bir edebiyatları var Kafka, Kundera, (Aslan asker Şvayk) kitabının yazarı Haşek bunlardan bazıları. Aslan Asker Şvayk kitabını öneririm en az bizim Hababam Sınıfı kadar komik bir kitap.

9. Nerede Eğleniriz?


James Dean, Aloha, Tretters güzel ve yerli insanların takıldığı clublardır. Yabancılar Chapa Rouge ve M1’e giderler. Karlovy Lazne en büyük clubdır ama iğrençtir, turist kazığıdır. Gitmeyin. Artı bilmediğiniz, sokaktan birilerinin sizi davet ettiği yere de gitmeyin. Bütün gideceğiniz yerleri tripadvisor’dan kontrol edin.

10. Nerede kalırız?

Merkezdeki hosteller ucuzdur. Oteller’de astronomik pahalı değildir. Çok turist çeken bir ülke olduğu için her türlü bütçeye uygun imkan bulmak mümkün. Couchları da araştırabilirsiniz. (Couch Değilim.)

Şimdilik bu kadar. Başka sorular olursa, yorum yazarsanız sevinirim.




Projelerle PHP 7

Ben Mutlu Koçak, Bilgisayar Mühendisiyim, ZCPE Sertifikasına sahibim ve “Hiç Bilmeyenler İçin İnternet Programlamaya Giriş — PHP 7” adlı kitabın yazarıyım. Kitabım: https://www.seckin.com.tr/kitap/911934237
Özgeçmişim:
http://represent.io/mtkocak.pdf 
Websitem:
http://mynameismidori.com

İyi geceler Sessizlik


yalnızlık. büyük boşluk.

https://en.wikipedia.org/wiki/Lost_in_Translation_(film) izledim biraz iyi geldi.

ara ara depresyon atakları geçiriyorum. yanımda kimse olmuyor. sanki bedenimde tek başına hapisteymişim gibi. bazen gülüyorum. sonra geçiyor. içimden yazmak dahi gelmiyor. bazen iyi bazen de kötü oluyor. koskocam şehir ama herşey inanılmaz sıkıcı. tuhaf olan istanbulda da böyleydim. evde tek başına. sevilmesi zor nalet bi insanım. tamam kabul ediyorum sivri dilim düşüncelerim var. bazen denemeye değer.

son derece fikrisabit. bazen arsız bazen terbiyesiz. ama laubalidir de.

kelimelerin akıp gitmesini izliyorum. yarın olacak, yine aynı olacak. bugün çok ağrım vardı sızlandım durdum. kendi kendime sızlandım ama. kimsenin kafasını şişirmedim bu sefer. sürekli deniyorum, olmasa da deniyorum işte.

fotosentez

öylesine akıp giden düşüncelerimi izliyorum. nefesimi dinliyorum. zamana kelepçelenmiş isteklerim benim olmayan yüzümün bir yansıması gibi. dinmiyor. dışarı çıkıp bağırmak istiyorum. bağırıp çağırmak.

3 ay önce kendimi köprüden atmaya çalıştım. köprü de unkapanı köprüsü kadar bile yüksek değil hani. ama hissettiklerim gerçekti. içimde büyüyen bi boşluk var. sadece yazmak istiyorum. telefonum çalmıyor. resimlerimi bile beğenen yok. sahteyim ya, ben ben değilim ya. ondan sanırım. ruhum yavaş yavaş kireçleşiyor. taş gibi kırık kırık kırıntılara dönüşüyor. sabah resim fırçasını elime aldım. bişiler karaladım. onları da beğenmedim. ormanda düşen bi ağaç ses çıkarır mı? hah işte onun gibiyim şu an.

küçükken hocalarım bu çocuk dikkat çekmeye çalışıyor derlerdi. anneme ne zaman karşı çıksam onun da argümanıydı bu. bitki gibi yaşıyorum yıllardır. su olarak zehir. yapraklarım sararıyor. dökülüyor. sonra yeniden çıkıyor. sabrediyorum. dönüşüyorum. tırtılın çaresizliğini hissediyorum. tırtıl bir hapishanedir aslında. bunalır sıkıntıdan. konuşacak bişi de yok. herşey belli. sadece egolar çarpışıyor. bir iki eline alıp sallayacağın oyuncak gibi işte. sonra kenara fırlat at.

kabullenilmek de değil beklediğim. geçen gün doktorum “sadece senin yanında olduğumuzu bil” dedi. o bile yetti. tek bi cümle. aslında bu kadar depresyona girmeyiz de. şunu duyabilsek. ama kimse yanımızda değil aslında. geçen gün twitin birinde “ulen normal adam twitterda olur mu” yazmıştı kızın biri. haklıydı.

yaşama isteğimi nerden almalıyım?

Sesim çıkmıyor sanki bazen, bazen de kendim susuyorum. Hayaller hayatlar meselesi de değil, hayal ettiklerime yaklaşabiliyorum, elde de ediyorum, iki ileri bir geri. ama boşluk nedense sürekli büyüyor. O kadar saf naif iyi niyetli insanlarız ki, iki güler yüz, iki ilgi gösterene hemen inanıyoruz. Salağız galiba. Ya da çok yalnız. Bugün depresyon atağı günü. Geçicek sanırım. Uyuyabilirsem. Kas ağrılarını napıcam bilmiyorum.

O kadar çok olumsuzu paylaşmaktan korkuyoruz ki. Oooh iyi olmuş diyenler oluyor kesin. Gebersinler. Bizim en boktan en mutsuz hallerimiz bile o karaktersiz insanların hayal ufuklarının ötesindedir. Ve o insanlar gerçekten maddi şeylerle, bayağı şeylerle mutlu olurlar. Ignorance is bliss. ben ise miyazaki filmleriyle mutlu oluyorum. simple bi insanım. mutlu olmam için devasa şeylere gerek yok. ama egonuz yüksekse beni mutlu edemezsiniz.

iyi geceler sessizlik

Hiç bilmeyenler için ‘Gaslighting’


“Masnplaining”, “Erilleme” veya “Açükleme” kavramına değinilmiş, fakat “Gaslighting” kavramına pek değinilmemiş. Bu yüzden bu konuya açıklık getirmek istedim.

“Gaslighting” 1938 yılındaki bir ingiliz tiyatro oyunundan alınmış bir terim. Gaz lambasıyla oynamak manasına geliyor. Tam olarak çevirisi olmasa da “Kendinden şüphe ettirmek” gibi bir anlamı var. “Mobbing” yani psikolojik tacizin bir çeşididir. İşyerinde Psikolojik Taciz makalesinde Pınar Tınaz Mobbing’i şöyle tanımlar:

Mobbing rahatsız edici davranışlarla kendini gösteren, zaman geçtikçe acı vermeye başlayan ve olayların sarmal biçimde hız kazandığı; çeşitli aşamalardan oluşan bir süreçtir.

Gözümüze kolayca çarpan, bilinçli, kötücül taciz biçimlerinden farklı olarak, “Gaslighting”, aynı “mansplaining” gibi, bilinçli uygulanması gerekmeyen, içselleştirilmiş düşünce kalıplarının sonucunda ortaya çıkan bir kavramdır. Bu yazıda konuya feminist bakış açısından bakacağız.

Örneğin, işyerine geldiniz, herkes o gün yapılacak etkinliği konuşuyor ve etkinlik iki hafta önceden kararlaştırılmış, ancak sizin haberiniz yok. “Acaba kaçırdım mı?” diye düşünüyorsunuz. Ancak kimse size bilerek ya da bilmeyerek haber vermemiş. Sonuç olarak kendinizden, algılarınızdan şüphe ediyorsunuz.

Başka bir örnekte, toplantıda önerdiğiniz bir konu, laf kalabalığına getirilerek geçiştiriliyor. Önemsemiyorsunuz, ancak daha sonra genellikle erkek çalışan tarafından aynı şeyin önerildiğini ve kabul edildiğini görüyorsunuz. Sonuç yine kendinizden şüphe etmeniz.

Etraftaki insanların algıları, yaptıkları şeyler o kadar saçma ve aptalcadır ki, bunu herkes yaptığından sorgulamazsınız bile. Davet edildiğim bir iş denemesinde diğer çalışanlar Kadın adayların özgeçmişlerinden isimlerini bulup, facebook profil resimlerini birlikte inceliyorlardı. “Adayları fiziksel görünüşlerine göre mi seçiyorsunuz?” diye sorduğumda gülerek “E herhalde” demişlerdi. O sırada durumun vahametini anlayamamıştım, çünkü herkes eğleniyordu. (Bütün çalışanlar erkekti tabii ki) Sonradan evde kendi kendime düşününce durumun vahametini algıladım. Bilinçli yapmıyorlardı. Durumu o kadar kanıksamışlardı ki, saçmalığın farkında bile değillerdi.

Bu kavramın “Masplaining” ile ilişkisi, açüklemeye itiraz ettiğiniz anda ortaya çıkan tepki. O tuhaf nefret dolu ya da alaycı, dalga geçen, küçümseyen bakış. Yani bir kadın olarak senin bilmemen ve benim bu konuyu sana açıklamam o kadar doğal ki zihniyeti. İtiraz ettiğinizde, “cadaloz” (ingilizce “bitch”), kaknem ya da kibarca, “Ya sen de çok hassassın canım” gibi tepkilerle karşılaşmanız durumu. Bunu herkes yaptığında, ofisteki diğer kadınlar veya akıllı uslu bildiğiniz adamlar da duruma sessiz kaldığında, kendinizden şüphe ettiğiniz o enfes andır “gaslighting”.

Hakkımda: Hiç bilmeyenler için Sıfırdan Web Programlama kitabının yazarı ve Kadın Yazılımcı bilgisayar mühendisiyim.

Kişisel sitem: http://www.mynameismidori.com

Bu da özgeçmişim: http://represent.io/mtkocak Not: Türkiye’de yaşamıyorum.

Hiç bilmeyenler için 9 Ekim 2016 Github’ın kapatılması olayı


Öncelikle Github denen sistem, bütün dünyadan açık kaynaklı yazılımların paylaşıldığı bir sistemdir. Açık kaynaklı yazılım ise şu anda Elinizde tuttuğunuz android telefondan, bankamatik ATM’lerine kadar bir sürü şeyi çalıştıran bilgisayar programlarını güvenli kılan şey.

Yazılım ilk yazıldığında, çalışması için makine kodlarına çevrilir ve 0101011 gibi insanların kolay kolay anlayamacağı bi hale gelir. Şirketler yazılımlarının kopyalanmasını kar etmek için istemezler bu yüzden de kaynak kodlarını saklarlar. Ancak kendini geliştirmek isteyen, adını duyurmak isteyen yazılımcılar ya da yan hizmet sunmak isteyen şirketler de kaynak kodlarını açık olarak paylaşırlar. Açık kaynaklı yazılım güvenlidir çünkü herkes içinde virüs vb. olup olmadığına bakabilir.

Sistemlerde sıklıkla güvenlik açıkları çıkar. Bütün yazılımlarda bu açıklar güncellemelerle kapatılır. Güncelleme yapmazsanız hackerlar sisteminize girip banka şifrelerinizden, kişisel bilgilerinize kadar herşeyi ele geçirebilirler, şirketinizi çalışmaz hale getirebilirler. Üstelik kul hakkını, KPSS’yi hiçe sayıp, müslümandır vs diye insanları sağa sola atamalarını yapıyorsanız bunu da sağa sola yayıp sizi rezil ederler. Güncelleme, hata bulunduktan sonra hemen yapılır ki hackerlar açıktan yararlanıp sisteme giremesinler, hatta sistemler kendilerini otomatik güncellerler. Eğer güncelleme elle yapılıyorsa, açığın ortaya çıkmasından güncellenene kadar olan saldırılara 0 day, yani “sıfırıncı gün saldırısı” denir. İşte Github’ın kapatılması tam da bu süreyi uzatıyor ve otomatik güncelleme yapan açık sistemler manuel olarak güncellenmek zorunda kalıyor ve tabiri caizse götün açık kalma süresi uzuyor. Biliyoruz ki açık göte sinek konar.

9 Ekim 2016 günü türkiyeden erişime kapanan Github sitesi, yazılım geliştirmenin can damarıdır. Sebze halini kapatmak gibi düşünün. Bütün restoranlar çöker. Hangi meyvenin sebzenin nerden geldiğini kimse bilmez.

Tabii ki ATM’ler vs çökmeyecek bu işin esprisi. Ancak bunun gibi sistemler, sunucular güvenlik açığı olmaması için otomatik güncelleme yaparlar. Github’a erişim kapalı olacağı için de güncelleme yapamayacaklar. Ayrıca online ödeme sistemleri ve e-ticaret siteleri de açık kaynaklıdır ve güvenlik açığı çok olur. Bunlar da güncellenemeyecek.

Şurası kesin yarın bütün şirketlerin IT departmanlarında deprem yaşanacak. Yazılım şirketleri şok geçirecekler. IOT bitti denebilir. Kendi içinde yazılım geliştirme için Github kullanan bankalar varsa onlar çok sıkıntı yaşayacaklar. Ben olduğunu sanmıyordum ama sanırım HSBC çinde benzer bir yasaklama olayında faaliyetlerini durdurmuş. Ayrıca Milli yerli ödeme sistemimiz TROY tüm yazılım ve donanımlarını amerikan Discover firmasından almış, yani yazılım işinin millisi yerlisi olmaz. Güvenlisi olur. E ticaret siteleri bi 10 güne güvensiz hale gelir. Çünkü onlar güvenlik için hep açık ödeme kütüphane ullanırlar. PayPal zaten yok ama diğer hizmetler sekteye uğrar. tabii ki ATM’den şifresiz para çekme olayı işin esprisi ama dahi hackerin biri yaparsa ve Github engeli sayesinde yaptım bu işi derse hiç şaşırmam.

Burada önemli olan sadece bir sektör değil, nazi almanyası vari özgürlüklerin yok edilmesi, torpille devlete adam yerleştiren, dini inancına göre proje onaylayan zalimler yönetiyor türkiyeyi ve bunun açığa çıkmasından ölesiye korkuyorlar. Sadece eş dost arkadaş ilişkisiyle istediğini kayıran insanlarla teknoloji gelişim olmaz. Fikir ifade özgürlüğü önündeki tüm engeller kaldırılmalıdır. Yeniliklerin Amerika Birleşik Devletleri’nden çıkmasının tek sebebi bu. düşünce özgürlüğü. Orada başkana ibne diye beyaz sarayın önünde pankart aç, polis seni korur. 15 temmuzda demokrasi için insanları kendi yaptıkları toplantı yasasını delerek meydanlara davet eden zihniyet, daha bugün 10 ekimde ölen insanların anılmasına izin vermedi.

Evrensel insan hakkı olan basın açıklaması, gösteri ve toplantı özgürlüğü askıya alınmış, suçu olsun olmasın, düşüncesini ifade eden insanlar tutuklanıyor, gözaltına alınıyor, polis yani hükümet eliyle işkenceye, hakaretlere tacizlere çıplak aramalara maruz kalıyor. Yandaş olmayan ne kadar TV kanalı radyo internet sitesi varsa kapanıyor ve engelleniyor. Amaç sadece ve sadece milyar dolarlık projelerin ve gücün ellerinden gitmemesini sağlamak. Duyduğum kadarıyla o mailler aslında o kadar içler acısı ki. o kadar çok asgari ücretler iş için yalvaran insanlar, bir yandan da 4 milyon dolarlık projeyi şuna verdik buna verdik diye mailler varmış.

İnsanım diyen birinin nasıl vicdanı kaldırır bunu? Yıllarca FETÖ adlı iğrenç oluşumu heryere sarmışlar ve temizlemeye çalışıyorlar şu an ve bu aptallıklarının da ortaya çıkmasını istemiyorlar. Bu yüzden bozulacak üç beş ödeme sistemi, insanların çalınan haklarından önemli değil bence. Yani bakanın maillerini koruyacağım diye github’ı kapayan memur ya gerizekalıdır ya da haindir FETÖ’cüdür. Yoksa bilerek bir sektöre bu kadar zarar verilmez.

Engellemede bir amaç varsa, sadece güç gösterisi yapmak olduğunu düşünüyorum. Yani tümden #dropbox’u #googledrive’ı #github’ı kapatırız, gücümüz var demek bunu göstermek için çünkü diktatörlük öyle kötü bişi ki, bir sefer iktidarı kaybedersen, game over. O yüzden korkuyla baskıyla haksızlıkla iktidarını ve gücünü sürdürmek zorundasın.

Düşüncenin ve bilginin özgür olmadığı yerde teknolojik gelişme olmaz.

Yerli bulut diye bişey olmaz. İnternet dünyasında yerli milli vs. diye bişi asla olmaz. Tüm dünya birbiri ile yardımlaşırken sen şebekeni kapatırsan, kuzey kore gibi geride kalırsın. Bi katarakt ameliyatını yapamayacak hale düşersin. En yasakçı çin bile açık kaynaklı yazılım kullanıyor devlet sistemlerinde. Türkiye’de de Pardus işletim sistemi vardı ve adam kayırmacılık için projeyi çöpe attılar.

Özetle;

Github’ın kapanmasının sebebi #redhack emailleri torrente yükledi. torrent engellenemeyen bi sistem. Torrent dosyasını Google drive ve dropboxta paylaştılar ama o hackerların bile böyle aptalca bir tepkiyi beklediklerini sanmıyorum. bütün bulut sitelerini komple engellemek bu gerçekten aptallığın dibi. #github olayı yok artık bunu da engellemezler. diye yapıldı sanıyorum. çünkü tüm siteyi engellemek gerçekten kurunun yanında herşeyi yaktı. USA’da da siteler engellenebiliyor. sitelerin tamamen kapandığı çok nadir mesela USA’da #megaupload sitesine hükümet el koymuştu. Ama sahibi ertesi gün yeni site açtı. aslında bu engelleme olayları #napster hikayesiyle başlar ama bu da ayrı bi tez konusu.

Hillary Clinton’un bakanken mailleri sızdı ve bunları paylaşan haber yapan HİÇBİR SİTE engellenmedi, bu haberleri yaptı diye kimse gözaltına alınmadı. Tabii Hillary Clinton’un binlerce mailinde, şunun şuraya atamasını yapalım, bak bu iyi bir hristiyanmış, yerli milli amerikalı, SAT skorları düşük ama olsun demokrat partiden falan gibi mailler olduğunu da sanmıyorum.

Not: Amerikada çok sert ifade özgürlüğü yasaları var. Hakaret davası diye birşey yok. Çık beyaz sarayın önünde eylem yap, obamaya küfret fln, anayasayla ifaade özgürlüğün korunuyor. Bu yüzden bi düşünün neden Mac Book Pro California’da tasarlanıyor ve Çin’de üretiliyor da neden tersi değil. Ya da neden Türkiye’de bilim adına ilerleme adına teknoloji adına dunya çapında hiçbir zıkkım olmaz olamaz?

Sonuç olarak eğer yarın işbaşı saatine kadar açılmazsa, matbaanın 300 yıl sonra gelmesinden daha çok zarar verir bu olay Türkiye’ye. Hatta hatta trenlerin otomatik sinyalizasyon sistemlerinin, havlimanındaki bilet, uçuş sistemlerinin bi 10 güne folloş olduğunu hayal dahi etmek istemiyorum.

Hakkımda: Hiç bilmeyenler için Sıfırdan Web Programlama kitabının yazarı ve Kadın Yazılımcı bilgisayar mühendisiyim.

Kişisel sitem: http://www.mynameismidori.com

Bu da özgeçmişim: http://represent.io/mtkocak Not: Türkiye’de yaşamıyorum.

What is an object?

Everything can be a subject of another thing, is an object.

“A thing external to the thinking mind or subject.” https://en.oxforddictionaries.com/definition/object

So what is a thing? According to Oxford Dictionary a thing is;

“An object that one need not, cannot, or does not wish to give a specific name to.” https://en.oxforddictionaries.com/definition/thing

An object is a thing, and is not our thinking mind. Our thinking mind can be an object too, when is a subject of another object. Let’s summarize;

  1. An object is a thing and is external to thinking mind.
  2. When is named, is still a thing but we can distinguish from other objects using that name. So names are for differentiating things.
  3. They have relations with other objects. They become subjects when “A person or thing that is being discussed, described, or dealt with.” https://en.oxforddictionaries.com/definition/subject

If we consider our thinking mind as a box, the input it takes, the perceived one is a thing. This is the boundary that defines what is an object, what is not. They have actions to other objects.

Here Object is a subject to the thinking mind.

Things, that are perceived from thinking mind are objects. And objects have relations with other objects. So they become subjects for the other object that they interact.

Objects can have relations.

We said that a thing, is an object without a name. An an object is a thing that is outside of our thinking mind. The name of the object, is a property of the object. Objects can have other properties and this is what we call information in this context. So information is “Facts provided or learned about something or someone. ‘a vital piece of information’ https://en.oxforddictionaries.com/definition/information

The simplest form of relationship is the ownership of information.

The simplest form of relationship of an object is the ownership of information. An object can have a “name”, it owns it’s name. But how this ownership works? Can an object change it’s name? Or can name itself? Can change it’s property? Mostly, the objects are named by someone other than object itself. Consider a new born baby, without a name. Her parents will name her. But having or not having a name, does not have an effect to it’s existence. The existence, on the other hand, is defined as: “The fact or state of living or having objective reality.” https://en.oxforddictionaries.com/definition/existence There is a confusing question appears at this point. Does an imaginary baby exist before it’s born? Our realization appears in someone else’s mind before we become our life? This type of conceptual existence, is the first stage of living, or getting real. There is an imaginary stage of every object. The reality, or real existence could be different from imagined one.

We arrived another concept to point out: The time. There are stages of an object.

  1. Imaginary stage.
  2. Factual stage. (Have relations to material things)
  3. Post mortem imaginary stage.

In the next article I will talk about the life cycle of the object.