C# öğrenmeye nereden başlanılır?

Gokberk_DRY

Hectopat
Katılım
24 Eylül 2020
Mesajlar
2.859
Makaleler
9
Çözümler
29
Yer
Antalya
C# öğrenmek için nereden başlamalıyım, nasıl başlamalıyım? Hangi video veya site daha kolay veya daha iyi olur, C# öğrenmek ne kadar zaman alır? C# öğrenmek zor mudur?
 
Son düzenleyen: Moderatör:
Ben sana katılmıyorum. Ben bu C# 101 patikası eğitimini inceledim. Bana kalırsa BTK Akademideki C# eğitimi çok daha ağır. Özellikle o profesyonel backend kısmı yeni başlayan bir kişiye ağır gelebilir. 🙂
Size katılıyorum. Engin hoca direkt iş dünyasındaki c#'ı anlatıyor. Başlangıç için C# 101 patikası daha iyi. Hem pratikleri bol konuyu anlamadan geçmeme olasılığınız neredeyse yok.
 
C# ile yapabileceği şeyler ne anlamda kısıtlı? diye soracaktım fakat altta Unity başka bir dil yorumunu görünce vazgeçtim. :D
C++ ile karıştırdım, olur öyle. Turtle kullanmak istiyorsa C# olayı bayağı kısıtlıyor. C++ daha iyi bir seçenek olurdu, öğrenilen ilk dil için.
 
SOLID nedir?
SOLID yazılımda sürdürülebilirliği desteklemek adına kullanılan prensiplerdir.
5 tane temel prensiptir.
SOLID'ın amacı nedir?
Amacımız yazılımda sürdürülebilirliği sağlamaktır.

SOLID açılımı:
Single Responsibility Principle
Open Closed Principle
Liskov's Substitution Principle
Interface Seggregation Principle
Dependency Inversion Principle

Dipnot: Biz bir inşaat projesi yaptığımızı düşünelim. 5. katı çıktığımızda salonla mutfağın yerini değiştirelim diyemiyoruz.
Ama yazılım öyle değil.

Single Responsibility Principle(Tek Sorumluluk İlkesi) :
Bir metot, if bloğu, bir class, bir katman, yani program modülleri bunların tamamı sadece ve sadece bir iş yapmak zorundadır. Her program modülünün aslında tek bir görevi yahut sorumluluğu vardır.

Open Closed Principle(Açık Kapalı İlke):
Projemiz, içerisindeki nesneler ve proje kodları geliştirilmeye açık fakat değişime kapalıdır.
Uygulamalar yeni özellik eklemeye açık olmalıdır.
Yeni eklenen özellikler mevcut kodu değiştirilerek yahut silinip yeniden yazılarak yapılmamalıdır. Sürekli üzerine yeni özellikleri kodlar ile ekleyerek yapılmalıdır.

Liskov's Subsitution Principle:
Örnekli anlatımı: Bir havuzda yüzen gerçek ördek birde oyuncak ördek. İki farklı tür. Biri oyuncak ördek diğeri gerçek ördek. Bunların ikisi aynı soyutlama mekanizmasıyla soyutlanmamalıdır. Çünkü birisinin pile ihtiyacı varken diğerinin yeme ihtiyacı vardır. Bunların ikisi aynı şey değildir. Benziyor gibi duruyorlar ama aynı değildir.!

Gerçek hayat örnekli anlatımı: Bir işletme düşün. İki tip müşteri var. Birisi şahıslar diğeri ise şirketler. Şirketin ünvanı var şahısın ise ismi var.

Kişi müşteriler diye bir tablo yapıp müşteri adını ve şirket adını aynı yerde tutuyum diye düşünüyor. Kişi adını ve soyadını giriyor. Ad kolonuna ad, soyad kolonuna soyad giriliyor. Şirket kaydı girilirken ad kolonuna şirket adı, soyad kolonuna boş giriliyor yahut soyadı olan bir şirket adı girilebiliyor. Bu durum saçma sapan bir şeye dönüşüyor. Bunun böyle olmaması gerekiyor.
Müşteriler temel tablosu yapıp ortak özellikleri bunun içinde,
bir tane gerçek şahıs müşteri tablosu yapıp müşteri ortak tablosundan inheritance yapıp
diğerini de tüzel müşteri tablosunuda müşteriler temel tablosundan inheritance ederiz. O şekilde kayıtları gireriz.

Interface Segregation Principle: Bu prensip anlaması en kolay uygulaması en zor prensiptir.
Bu prensipte olay şudur:
Bir Interface kendisini implemente eden bir Class'ın bellek referansını elinde tutabiliyor. Interfacelerin doğru parçalara ayrılması olayıdır.

C#:
interface IBankConnector{
 void Op();
 void Op2();
}
interface IXBankConn : IBankConnector{
 void Op3()
}
interface IYBankConn : IBankConnector{
 void oOp4()
}
class ABank : IYBankConnector{
 void Op(){
  // burada kod var
 }
 void Op2(){
  //burada kod var
 }
 void Op4(){
  //burada kod var
 }
}

class BBank : IXBankConnector{
 void Op(){
  // burada kod var
 }
 void Op2(){
  //burada kod yok..!!!!!!!
 }/////burası kukla(dummy code) kod oldu gereksiz yere..!
void Op3(){
  //burada kod var
 }
}

Dependency Inversion Principle:
Yüksek seviyeli sınıfların düşük seviyeli sınıfları somut haliyle değil de soyut halleriyle kullanmasıdır. Buda bağımlılığı düşürüyor.
Bu prensipte temel olarak bir tasarım şablonu kullanılır. Bu tasarım şablonu Dependency Injection'dır.
CI(Constructor Injection),
SI(Setter Injection),
MI(Metot Injection).
Kod:
//örnek.
//basitçe anlaşılması için kötü bir örnek.
class CustomerManager{
 IMevzuat _mvz;
 ctor(IMevzuat mvz){
  _mvz = mvz;
 }
}
Dependency Injection desenini ayağa kaldırmak için IoC Container'lerdan yararlanırız.
 

Geri
Yukarı