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.