C#’ta Event-Driven Programlama ve Observer Pattern
Modern yazılım geliştirme dünyasında, kullanıcı deneyimi ve sistemlerin tepki hızı her zamankinden daha fazla önem taşıyor. Özellikle gerçek zamanlı verilerin işlendiği, kullanıcı etkileşiminin yoğun olduğu veya farklı bileşenlerin senkronize şekilde çalışması gereken uygulamalarda event-driven programlama yaklaşımı kritik bir rol üstlenir. Bu paradigma, sistem bileşenleri arasında gevşek bağlı (loosely coupled) bir iletişim modeli sunar. Yani, bir bileşende meydana gelen değişiklikler veya belirli bir olay (event) diğer bileşenlere otomatik ve asenkron olarak iletilir. Böylece, yazılım daha modüler, ölçeklenebilir ve kolay yönetilebilir hale gelir. C# dili, event-driven mimariyi destekleyen güçlü bir altyapıya sahiptir. Delegate ve event mekanizmaları sayesinde geliştiriciler, Observer Pattern gibi tasarım desenlerini doğal bir şekilde hayata geçirebilir. Bir önceki yazımızda “Delegate…
C#’ta Delegate ve Event Kullanımı
Merhaba arkadaşlar, C# programlama dilinde delegeler (delegates) ve etkinlikler (events), nesneler arasındaki iletişimi kolaylaştırmak ve dinamik yöntem çağrılarını desteklemek için kullanılan güçlü özelliklerdir. Delegeler, işaretçi mantığıyla çalışan nesnelerdir ve bir yöntemi temsil eder. Etkinlikler ise delegeler kullanılarak bildirim tabanlı bir yapıyı destekler. C# dilinde delegate (temsilci) ve event (olay) mekanizmaları, olay tabanlı programlama ve dinamik yöntem çağrıları için oldukça önemlidir. kodumuzun daha okunaklı daha temiz, kullanılabilir ve geliştirilebilir olmasında büyük bir etkiye sahip olan Delegate ve Event kavramları, özellikle olay tabanlı programlama (event-driven programming) için hayati öneme sahiptir. Bu yazıda, bu iki yapının ne olduğunu, nasıl kullanıldığını ve aralarındaki farkları adım adım açıklayacağız. Delegate Nedir? Delegate kelime olarak “vekil” ya da “temsilci” demek. Yani bir delegate aslında:…
Hata Yönetimi: Try-Catch ve Özel Exception’lar
Selamünaleyküm güzel insan! Yazılım öğrenirken belki de en çok karşılaştığımız ama en az sevdiğimiz şey “HATA”. Hele o ilk zamanlarda karşımıza çıkan o kırmızı yazılar yok mu? Bazen insan sadece şunu demek istiyor: “Kardeşim ben sadece iki satır kod yazdım, sen neden bu kadar sinirlendin?” Ama gel bakalım… Hatalar aslında seni üzmek için değil, yol göstermek için var. Kod yazarken hata almak çok ama çok normal. Hatta doğru yolda olduğunun işaretidir. Çünkü hata yönetimini öğrenmek, yazılımda bir adım öne geçmektir. Bugün seninle birlikte, çok temel ama bir o kadar da hayati bir konuyu konuşacağız: try-catch yapısı ve özel exception’lar. Hazırsan, hadi birlikte hatalarla dost olmaya başlayalım. Peki Hata…
C#’ta Koleksiyonlar: List, Dictionary, HashSet, Queue, Stack, ObservableCollection
Merhaba arkadaşlar, C#’ta kod yazarken verileri saklamak için sadece array kullanıyorsanız… çok şey kaçırıyorsunuz diyebilirim. Çünkü C#’ta hayatı kolaylaştıran harika koleksiyonlar var. Bu yazıda sizinle birlikte en çok kullanılan koleksiyon türlerine göz atacağız. Ne işe yarıyorlar, ne zaman kullanılırlar, örnekle anlatacağım. 🔸 1. List<T> – “Benim Dinamik Listem” List, C#’taki en çok kullanılan koleksiyonlardan biri. Dizi (array) gibi ama daha esnek. Eleman sayısı sınırsız gibi düşünebilirsiniz, ekle çıkar istediğiniz gibi oynayabilirsiniz. List<string> meyveler = new List<string>(); meyveler.Add("Elma"); meyveler.Add("Muz"); meyveler.Add("Karpuz"); Sonra şöyle döneriz: foreach (var meyve in meyveler) { Console.WriteLine(meyve); } Nerede kullanılır? Sıralı verileri tutmak istiyorsanız, liste halinde işliyorsan, bu kullanım tam sana göre; 🔸 2. Dictionary<TKey, TValue> – “Sözlük…
C# Arayüzler (Interfaces) ve Soyut Sınıflar (Abstract Classes)
C# ’ta yazılım geliştirirken karşımıza çıkan kavramlardan biri de “arayüz” (interface) ve “soyut sınıf” (abstract class) meselesi. İlk bakışta kulağa teknik, hatta biraz korkutucu gelebilir ama aslında oldukça mantıklı ve hayat kurtaran yapılar bunlar. Bu yazıda, hem yeni başlayanlara hem de “ben bunu tam oturtamadım” diyenlere göre herkesin anlayacağı şekilde anlatmaya çalışacağım. Arayüz Nedir, Ne İşe Yarar? Arayüzü, sanki bir sözleşme misali düşünebiliriz. “Ben bu kurallara uyacağım” diyorsun ama o kuralların nasıl uygulanacağı sana kalmış. Mesela: interface IHayvan { void SesCikar(); } class Kedi : IHayvan { public void SesCikar() { Console.WriteLine("Miyav"); } } class Kopek : IHayvan { public void SesCikar() { Console.WriteLine("Hav hav!"); } } Burada"IHayvan"adında bir arayüz…
C#’ta Nesne Yönelimli Programlama: Sınıflar, Nesneler ve Kalıtım
Merhaba arkadaşlar uzun zamandır blog yazamıyorum. Bazı proje ortaklıkları olsun, bazı kişisel hayatımdaki meselelerden dolayı paylaşım yapamıyorum. Bugün yeniden Bismillah deyip düzenli aralıklarla paylaşım yaparak eksiklerimi telafi edeceğim inşallah. Bugünkü konumuz C#’ın kalbine, yani Nesne Yönelimli Programlama (OOP) dünyasına bir yolculuk yapacağız. Eğer “Sınıf, nesne, kalıtım ne ki?” diye düşünüyorsan ya da bu kavramları biliyorsun ama daha iyi anlamak istiyorsan, bu yazı tam sana göre. C#’ ta OOP, kodunu daha düzenli, yeniden kullanılabilir ve anlaşılır hale getirmeni hedefler. Hadi, bu sihirli dünyayı adım adım keşfedelim! 1. Sınıf ve Nesne: OOP’nin Temel Taşları OOP’yi anlamak için önce sınıf (class) ve nesne (object) kavramlarını çözmeliyiz. Şöyle basit bir şekilde düşünecek olursak: Sınıf,…
SQL DDL(Data Definition Language) Komutları Nedir?
Bir önceki yazılarımızdan “SQL Nedir” konu başlığı altında DDL komutlarına kısaca değinmiştik. Bu yazımda bu komutları örneklerle sizlere anlatmaya çalışacağım. Türkçe karşılığı Veri Tanımlama Dili olan DDL komutları veritabanın da ki verilerin tipiyle ilgilenir. Veri tabanları bilgilerin depolandığı düzenlendiği ve erişildiği önemli bir bileşenidir. SQL (Structured Query Language), bu veri tabanlarını oluşturmak, değiştirmek ve yönetmek için kullanılan bir dildir. SQL içindeki DDL (Data Definition Language) komutları, veritabanı yapısını kontrol eder ve veri tabanının nasıl kullanılacağını belirler. İşte SQL DDL komutlarına dair temel bilgiler: 1.CREATE TABLE ‘CREATE TABLE’ komutu, yeni bir tablo oluşturmak için kullanılır. Bu komut, tablonun adını ve sütunların veri tiplerini belirterek tabloyu tanımlar. CREATE TABLE Ogrenciler ( OgrenciID…
Const ve Readonly Kullanımı
Bir önceki yazımızda değişken kavramından bahsetmiştik. Kısaca burda bahsetmek gerekirse değişken bir veri tipine ait temel verilerin geçici olarak tutulduğu ve gerektiğinde kullanılmak üzere oluşturulan bir sistemdir. Programlamada değişkenler adı üstünde değişen yapılardır. Birde bunların değişmeyenleri yani sabitler vardır. Sabitler yazılımın çalıştığı süre boyunca değiştirilemez durumdadır. İçeriği sabit olan değerlerin saklanması için kullanılır. Örnek verecek olursak bloglarda da sıklıkla karşılaştığımız “Pi” sayısını ele alalım. “Pi” sayısı sabittir. Program süreci içerisinde değiştirilemez. Çünkü bu bir standarttır. Şimdi aklınıza şöyle bir soru gelebilir. Neden normal bir değişken tanımlayıp bu tür sabit olacak verileri bu değişkenlerde tutsak olmaz mı? Aslında Bu duruma engel teşkil edecek hiçbir sebeb yoktur. Fakat yazılımın ilerleyen aşamalarında intellicense…
C# Veri Tipleri
Her dilde olduğu gibi C# dilinde de önceden tanımlanmış, programlama dillerinin vazgeçilmezi olan, veri saklamak için kullanılan bir takım veri tipleri mevcuttur. Bu veri tipleri iki farklı şekilde gruplandırılır. Bunlar değer ve referans tipleridir. Değer tipler veriyi tutan değişken türlerdir. Referans tipler ise veri yerine verinin bellekteki adresini tutan değişken türlerdir. Değer tipi bellekte stack adı verilen bölümde saklanırken referans tipleri ise heap adı verilen bölümlerde saklanır. Stack ve Heap kavramlarının ne olduğuna sınıf ve nesne konusunu anlatırken daha detaylı şekilde inceliyeceğiz ama kısaca bahsetmek gerekirse; Stack, boyutları belli aralıkta minimum ve maksimum sınırlarının belli olduğu değişkenlerin tutulduğu kısımdır. Stack içerisinde saklanacak verinin boyutu bilinmelidir. Heap ise sınırları belli olmayan…
SQL Veri Tipleri
Veritabanı tabloları oluştururken kullandığımız her veri için en uygun veri tipinin belirlenmesi gerekir. Bu veri tiplerini seçerken dikkat etmemiz gereken en önemli husus doğru olan veri tipini seçmektir. Bunun nedeni veri tipi seçiminin programın performansını etkilemesindendir. Küçük uygulamalarda pek göze çarpmasada büyük uygulamalarda veri tiplerini doğru bir şekilde belirlemiş olmak verilerin disk alanında daha az yer kaplamasına ve veritabanı ile uygulama arasındaki iletişimin daha seri bir şekilde gerçekleşmesini sağlar yani programın performansını olumlu yönde etkiler. Şimdi sırasıyla bu veri tiplerine ve özelliklerine bakalım, böylelikle hangi veri tipi hangi aralıkta hangi değerleri alıyor ve bellekte kendine ne kadar yer açıyor bunları öğrenmiş olacağız. bigint : 8 byte büyüklüğündeki tam sayı değerleri…