C# ile Nesne Yönelimli Programlama


C# Programlama Dili kolay ve hızlı uygulama geliştirmeyi amaçlayan C++’dan türetilmiş yalın bir nesne yönelimli programlama dilidir. Programlama dili olarak Java’ya oldukça benzemekle birlikte onun biraz daha iyileştirilmiş ve biraz daha C++’a yakınlaştırılmış bir biçimidir. Yalınlığı nedeniyle .NET programlama ortamının temel dili olarak kabul edilmektedir. C#’ı kullanarak, GUI uygulamaları, ASP.NET kullanıcı arayüzü, web servis uygulaması, dağıtık uygulamalar için bileşenler veya klasik bir Windows masaüstü uygulaması geliştirebilirsiniz. Bu kursta bir programlama dili olarak C# ele alınmaktadır. Bu kurs C# ile .NET Ortamında Uygulama Geliştirme kursu için bir önkoşul niteliğindedir.

Kurs konularından bazıları aşağıdadır:

Temel kavramlar

  • .NET ortamına ilişkin temel kavramlar (JIT, MSIL, CLR, CTS, CLS…)
  • Platform bağımsız çalışma olgusu
  • Çevirici programlar, derleyiciler yorumlayıcılar
  • .NET ortamının aşağı seviyede incelenmesi ve Java ile karşılaştırılması
  • Atom kavramı
  • Console sınıfının etkin kullanımı

Tür kavramı

  • .NET ortamının ortak tür sistemi, Type Inference
  • Değişkenler, sabitler ve faaliyet alanı
  • Ömür kavramı

Metotlar

  • Metotların geri dönüş değerleri
  • return deyimi
  • Metotların parametre değişkenleri
  • Opsiyonel parametreler
  • Default argüman alan metotlar
  • Variadic metotlar

Sabitler

  • Sabit kavramı
  • Sabitlerin türleri
  • Tamsayı sabitleri
  • Gerçek sayı sabitleri
  • bool türden sabitler
  • Karakter sabitleri
  • Escape sequence karakterler
  • Tamsayı sabitlerinin hexadecimal, binary ve octal gösterilişleri
  • Gerçek sayı sabitlerinin bilimsel gösterilişi
  • Sabit bildiriminde alttire karakterinin kullanımı

Temel Operatörler

  • Operatörlerin sınıflandırılması
  • Operatör önceliği
  • Aritmetik Operatörler
  • Karşılaştırma operatörleri
  • Mantıksal operatörler
  • Atama operatörü ve işlemli atama operatörleri

Kontrol deyimleri

  • if ve switch deyimleri
  • while ve do while döngü deyimleri
  • for ve foreach döngü deyimleri
  • break ve continue deyimleri
  • Örnek programlar

Tür dönüştürmeleri

  • Farklı türlerin birbirine atanması
  • İşlem öncesi otomatik tür dönüşümleri
  • Tür dönüştürme operatörü

Koşul operatörü

  • Koşul operatörünün özellikleri
  • Koşul operatörünün kullanıldığı durumlar

Aynı isimde metotlar (method overloading)

  • Bir sınıf içerisinde aynı isimde metotlar
  • Bir metodun imzası
  • Çağırma sırasında hangi metodun çağrılacağının belirlenme süreci (overload resolution)
  • Tam uyum (best match)
  • Tam uyum olmadığında hangi metodun çağrılacağının belirlenme süreci

Nesne Yönelimli Programlama Paradigması

  • Nesne yönelimli programlama paradigmasına ilişkin temel kavramlar, diğer paradigmalar ile karşılaştırma
  • Sınıf ve nesne kavramları

Adres kavramı

  • Adres kavramı
  • unsafe uygulamalarda pointer (gösterici) kullanımı
  • Stack, Code ve Heap alanları

Temel sınıf kavramları

  • Sınıf ve nesne kavramları
  • Referans türleri ve değer türleri
  • Referans kavramı
  • new operatörü
  • Sınıfın static olmayan veri elemanlarına erişim ve nokta operatörü
  • Sınıfın static olmayan veri elemanlarının varsayılan değerleri
  • Referans parametreli metotlar
  • Referans geri dönüş değerli metotlar
  • Sınıfın static veri elemanları
  • Sınıfın non-static ve static metotları
  • Sınıfın non-static metotları içerisinde non-static ve static elemanlara doğrudan erişim durumu
  • Sınıfın static metotları içerisinde non-static ve static elemanlara doğrudan erişim durumu
  • Örnek yararlı sınıflar

Sınıfların başlangıç metotları (constructors)

  • Nesne oluşturulması adımları
  • Sınıfın varsayılan (default) başlangıç metodu
  • Başlangıç metotlarının overload edilmesi
  • Örnek yararlı sınıflar

Rassal sayı üretimi (Random sınıfı)

String sınıfı

  • Immutable sınıf kavramı
  • String nesnesinin bellekteki durumu
  • String sabitleri (String literals)
  • String sınıfının metotları
  • String işlemlerine yönelik yararlı metotların yazılması
  • Örnek programlar

İsim alanları

  • Paketleme ve granülasyon kavramları
  • Farklı isim alanlarındaki sınıflara erişim
  • İç içe isim alanı bildirimleri
  • using anahtar sözcüğü

İsim arama

  • Niteliksiz (unqualified) isim arama
  • Nitelikli (qualified) isim arama

Diziler (Arrays) ve uygulamalar

  • Dizi referansları
  • Diziye ilişkin nesnelerin bellekteki durumu
  • Dizi elemanlarına erişim
  • Dizilere ilk değer verilmesi
  • Dizilerin metotlara geçirilmesi: dizi referansı parametreli metotlar
  • Dizi referansı döndüren metotlar
  • Dizilere ilişkin temel algoritmaların yazımı
  • Dizilere ilişkin yararlı metotların yazımı
  • Dizilerde bazı sıralama algoritmaları: kabarcık sıralaması (bubble sort) ve _seçerek sıralama (selection sort) algoritmaları
  • char türden diziler
  • char türden diziler ve String sınıfı
  • Referans dizileri
  • Referans dizilerine ilkdeğer verilmesi
  • String türden diziler
  • Dizi dizileri
  • Dizi dizilerinin çok boyutlu dizi gibi kullanılması
  • Dizi dizilerine ilk değer verilmesi
  • Matrisler ve matrislere ilişkin algoritmalar
  • Örnek programlar

Sınıflarda temel erişim kuralları

  • public erişimcisi
  • private erişimcisi
  • protected erişimcisi
  • internal erişimcisi
  • Başlangıç metodunun private, protected ya da internal olması durumu
  • Singleton tasarım kalıbı
  • Encapsulation kavramı, Property’ler ve property’lerin ara koda nasıl dönüştüğünün incelenmesi
  • Örnek sınıflar

enum’lar

  • enum sabitleri
  • enum sınıfların sabit dışındaki elemanları
  • enum sınıfların başlangıç metotları (constructor)
  • enum’ların eşitlik karşılaştırması
  • enum’ların karşılaştırılması
  • enum’ların kullanımı
  • Örnek enum sınıflar

Sınıflar arası ilişkiler

  • Composition
  • Aggregation
  • Association
  • Inheritance
  • Sınıflar arası ilişkilerin modellenmesi
  • UML modelleme diline giriş

Türetme (inheritance)

  • Base class (taban sınıf) ve derived class (türemiş sınıf) kavramları
  • Türetme sentaksı
  • Başlangıç metodu içerisinde taban sınıfın başlangıç metodunun çağrılması
  • Başlangıç metodu içerisinde taban sınıfa ait istenilen bir başlangıç metodunun çağrılması
  • Başlangıç metodu içerisinde başka bir başlangıç metodunun çağrılması
  • protected bölümün anlamı
  • Object sınıfı
  • Örnek sınıflar

Taban sınıf ve türemiş sınıf arasındaki dönüşümler

  • Yukarıya doğru dönüşüm (upcasting)
  • Yukarıya doğru dönüşümün anlamı
  • Aşağıya doğru dönüşüm (down-casting)
  • is opetörü
  • Otomatik kutulama (auto-boxing) ve otomatik kutuyu açma (auto-unboxing)
  • sealed sınıflar
  • Referansların statik ve dinamik türleri
  • Örnek programlar

this referansı

  • this referansının anlamı
  • non-static metotlar içerisinde this kullanmı

null referans

  • null adres kavramı ve null sabiti
  • null referansın kullanıldığı durumlar

Çöp Toplayıcı (garbage collector)

  • Nesnelerin ömürleri
  • Nesnelerin seçilebilir (garbage collected) duruma gelmesi
  • Çöp toplayıcı’nın çalışma biçimi
  • Nesnelerin gösteren referansların takibine yönelik tipik algoritmalar
  • using anahtar sözcüğü
  • IDisposable arayüzü

Dinamik büyüyen dizi veri yapısı

  • Dinamik büyüyen veri yapısına ilişkin temel kavramlar: capacity, size vs.
  • Dinamik büyüyen veri yapısına ilişkin metotların karmaşıklık durumları
  • ArrayList ve List sınıfları
  • HashTable Dictionary SortedList sınıfları
  • Örnek bir dinamik büyüyen dizi sınıfının yazılması

Çok biçimlilik (polymorphism)

  • Çok biçimliliğin programlamaya yönelik tanımları
  • Çok biçimli mekanizma
  • Sanal metotlar
  • Sanal metotların override edilmesi
  • Metotların override edilmesinin anlamı
  • base referansı
  • Override edilen metot içerisinde taban sınıfın aynı metodunun çağrılması (augmentation)
  • Override edilen metodun erişim belirleyicisinin erişim anlamında yükseltilmesi
  • sealed metotlar
  • Çok biçimliliğe ilişkin örnek tasarımlar ve kodlanması

Soyut sınıflar ve metotlar (abstract classes and methods)

  • Soyut sınıf ve metotların anlamı
  • Soyut metotların override edilmesi
  • Soyut metotların override edilmemesi durumu
  • Soyut sınıfların taban sınıf referansı olarak kullanılması
  • Soyut sınıfların başlangıç metotları
  • Örnek sınıflar

Exception mekanizması

  • Exception kavramı kullanımı
  • throw anahtar sözcüğü ve bir exception nesnesinin fırlatılması
  • try blokları
  • catch blokları
  • catch blokları parametrelerine ilişkin sınıflar ve uygun catch bloğunun bulunması
  • Yeniden fırlatma (rethrow)
  • İçiçe try bloklarının bulunması durumu
  • finally bloğu
  • Yakalanamayan exception durumu
  • Exception sınıflarının anlamı
  • checked ve unchecked exception sınıfları
  • Önemli exception sınıfları
  • Örnek sınıfların exception açısından düzenlenmesi ve genel hale getirilmesi

Arayüzler (interfaces)

  • Bir sınıfın desteklediği arayüzler ve metotların override edilmesi
  • Arayüzler ile abstract sınıflar arasındaki farklar
  • Arayüzler arası tür dönüştürme ayrıntıları
  • Sıkça kullanılan bazı arayüzler

Generic sınıflar ve metotlar

  • Generic sınıflar
  • Generic sınıflarda türetme işlemleri
  • Generic sınıflarda new operatörü ile <> (diamond syntax) kullanımı
  • Generic arayüzler
  • Generic türlerde kısıtlamalar
  • Generic sınıflarda alt sınır ve üst sınır belirlenmesi (invariant, covariant ve contra-variant)
  • Generic metotlar
  • Generic metotlarda parametre türlerinin tespiti
  • Örnek sınıflar ve programlar

Programın komut satırı argümanları

Extension metotlar

Delegate (temsilci) ve Event’ler

Reflection ve metadata kavramlarının uygulamada kullanılması

  • Type sınıfı
  • typeof operatörü

Attribute sınıfları

Lambda ifadeleri

Bit seviyesinde işlemler ve ilişkili operatörler

Dinamik kütüphanelerin DLL oluşturulması ve kullanılması

Dosya işlemleri

  • Dosya ve dizin (directory) kavramları
  • Dosya yol ifadeleri: absolute and relative path
  • Processin çalışma dizini (current working directory)
  • Metin (text) ve ikili (binary) dosyalar
  • File Directory sınıfları
  • Stream soyut sınıfı
  • Dosya işlemleri
  • Örnek programlar

Önkoşul: Daha önce herhangi bir programlama dilinde uygulamalı çalışma yapmış olmak veya derneğimizin açmış olduğu Programlamaya Giriş kursuna katılmış olmak.

* Kurs ücretini sorunuz.

Bu kurs C ve Sistem Programcıları Derneği ve Sistem Bilgisayar işbirliği ile düzenlenmektedir.