abstract class etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
abstract class etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Nesne Yönelimli Programlama (OOP) Temel Kavramlar Detaylı Anlatım Bölümü
Sinan Arslan
Merhaba Arkadaşlar ,
Sınavlrın bitmesiyle birlikte yeniden blog üzerinde makale ,video ,proje ,uygulama vs. işlemlerini zaman bulabildikçe anlatmaya devam ediyor olacağım.Daha fazla lafı uzatmadan OOP hakkında daha önceden yapmış olduğumuz uygulamada eksik kalan bölümler ,kavramlar ve bunların bir uygulamaya dökülmesi noktasında bu makale üzerinden devam ediyor olacağım.
Nesne yönelimli programlamada (OOP) içersinde temel kavramlar ,temel kurallar olarak devam edelim.Ve sırası geldikçe bu kavramları ve kuralları ele alıp açıklamaya çalışalım.İlk aşamada bu işlemleri gerçekleştirirken makalenin sonunda ise paylaşılan örnek uygulamayı incelemenizi tavsiye ederim.OOP'u anlatırken basit manada belirli temel kavramları anlamtmak amacıyla başlamış olduğum bu makalede yeni başlayanlar için birçok özellik ve bir çok kural varmış gibi gözüksede kavramların matığını anlayarak ilerlemek ve yapmış olduğum yada internet ortamından yapılan detaylı örneklerle OOP'u anlamak ilerde yapılacak detaylı projelerde yada kendi projelerinizde hayat kurtarabilir.
1)Class:Sınıf soyut bir veri tipidir.Nesne ise onun somutlaşan bir cismidir.Ram'in heap bölünde tututlur.Referans tiplidir (reference types ).Sınıf kavramı detaylı bir bölüm olduğu için örnek uygulamamızdan anlatmaya devam ediyor olacağım.Son olarak class içinde tanımlanabilecek temel anlamda kullanılan öğeler
1)fields(değişkenler)
2)Methodlar(constructor gibi yada Kullanıcı tanımlı methodlar)
3)Eventler
===Abstract Class==
1-a)Abstract Class Nedir?Ve özelliklerine nelerdir.
* Absctract classlar kendinden türeyen classlara base class olmak amacıyla yazılır
* Abstract classlar Absctract methodlar içerebilirler
* Abstract class içindeki abstract methodların gövdeleri yazılmaz.Abstract classdan türeyen sınıflar içinde implemente edilerek(zorunlu override işlemi) kullanılırlar.
* Abstract methodlar default olarak public access modifersina sahiptirler
* Abstract classlardan instance alınamaz
====Sealed Class======
1)Sealed Class:Mühürlenmiş anlamına gelir ve classın son halidir.Bu classdan miras alınamaz.
2)Interface:davranışların sınırlanması için yazılır.Amacı Kullanılacak classa rehberlik etmektir.Son olarak bir class en fazla bir class dan türetilebilirken(base class ve drived class mantığı) birden fazla interface'den türetilebinilir
========Basit Anlamda İnterfaceözellikleri=======
2-a) Interface ler yukarda bahsettiğim gibi Rehber görevi görürler. Yani içerisine herhangi bir kod parçası ekleyemeyiz. Sadece tnaımlama yaparız.
2-b)Bir Interface in tüm üyeleri Public kabul edilir. Private, Protected, Static gibi tanımlanamazlar.
2-c)Üyeleri public olarak ta tanımlayamayız, çünkü zaten hepsi public olarak tanımlanmış kabul edilir. Aksi halde hata alırız.
2-d)Bir arayüzü, başka bir arayüzden türetebiliriz, fakat bir Class tan yada Struct dan türetemeyiz.
2-e)Interface leri miras alan sınıflar, içerisinde tanımlanan tüm metodları Implemente etmek zorundadır.
2-f)interface tanımlarken interface verilen allianz isme I eklenerek Tanimlanir Örneğin IDepo gibi;
3)Struct:Aynı classlar gibi kullanılabilirler.Yani Sınıflardan farkı belleğin heap bölgesinde değil stack’te tutulmasıdır.bu yüzden classlara göre daha hızlıdırlar.İçlerinde Constructor,properties,field tanımlanabilinir.Kalıtım alamazlar.16byte yer kaplar
4)Enum:Sabit tanımlamalar için kullanılırlar.Ram'in stack bölgesinde bulunur.yani deger tiplidir.Default olarak int tipindedir.4 byte yer kaplar
5)Delegate:Delegate en basit anlamıyla metod referansıdır. Yani delegate metod referansını tutar.Örneğin mouse move,mouse up vs gibi Delegate tanımlanırken metodun geri dönüş değeri ve parametreleri belirlenir. Geri dönüş değerini void ve parametresiz tanımlamak da mümkündür. Kullanılacak metod, tanımlanmış olan delegate geri dönüş ve parametrelerine uygun olmalıdır.
OOP Kurallari
Encapsulation:Basit manada Class içindeki fieldsların dışardan erişimini engellemek için acces modifersleri private olarak işaretlerinip aynı fieldslar için oluşturulan propertieslere public access modifersleri verilerek kullanılır(Blog içersinde detaylı olarak video anlatım bulunmaktadır)
Inheritance:Kalıtım bir sınıfın tüm özellikleri ve methodlarının miras olarak alınmasıdır. (paylaşılan proje içindeki örneği inceleyiniz).
Polymorphizm:Biribirinden türeyen classların içindeki methodların isimleri aynı olması durumunda base classdaki method'un virtual anahtar kelimesi ile imzalanıp base classlardan türeyen drived classlarda basedeki methodun farklı davranması sağlanır.Bu işleme Polymorphizm(Çok Biçimlilik) denir
Constructor: C#'te herşey bir nesnedir. Nesne kavramını duyduğumuzda aklımıza gelen ilk şey Constructor(yapıcı) metottur. Çünkü bir nesnenin örneklenip Ram'e çıkabilmesi için constructor metot çağrısı yapılması gerekir.Constructor kullanım amacımız nesneye ilk değerini atayabilmek,Nesne kullanıcısını belirli bir değer vermeye zorlamak (method overload ile),Nesne oluşturulurken yapılacak işlemleri gerçekleştirebilmek
===============Constructor Özellikleri================
1-Geriye değer döndürmez.
2-İsmi,tiple aynı olmak zorundadır.
3-istenildiği bir anda çağrısı yapılamaz. Özel bir çağrılma biçimi vardır.
4-Nesne üretmek için çağırılan metottur. Constructor metot çağırılmadan heap'te nesne üretilemez.
AccessModifers
private :Sadece sınıf içinde kullanılabilinir.Amaç sınıfın içindeki fieldslara dışardan erişimi engellemektir
public:Proje içinde genel anlamda heryerden erişebilecek nesneler için Kullanılır
protected:Miras alınan sınıflarda kullanılabilinir.Amac basede ki classın özelliklerini sağlamak ve korumalı bir biçimde bu işlemi gerçekleştirmektir.
internal:Projedki nesnelerin kullanılabileceği ve başka projelerin kullanılmasına izin vermez.Örnek olarak namespace uzağı dır diyebiliriz
protected internal:Hem Proje içinde heryerde hemde miras alan heryerde kullanılabilinir
============Static Kavramı=====
Static :Yazmış olduğumuz projelerde tanımlanacak değişkenlere bazen projenin heryerinden erişmek isteyebiliriz.Bunu OOP'da static olarak tanımlanacak değişkenler ile yapabileceğimiz gibi farklı yöntemlerlede bu işlem gerçekleştirilebilinir.Fakat ele aldığımız bölüm static(durağan) olma kavramı olduğu için örneklendirerek devam edelim.Proje içinde classlardan birinde static olarak işaretlenen değişken o classdan instance almadan direk değer atama yöntemi ile gerçekleşebilinir.Paylaşılan projede detaylı inceleme yapabilirsiniz.
Method Overload :Method overload'ı açıklarken en güzel örnek class içindeki constructor'dır.Örneğin bir class oluşturduğunuzda default olarak varsayılan constructor boş olarak atanır. Ve Method Overload (Aşırı Yükleme) class içinde constructor method overload yapılacaksa (default) boş constructor tanımlanmalı ve classdan instance alınırken bu sefer new lediğinizde iki farklı kullanım gerçekleşicektir.tek şartı methodun imzasının değişmesidir(imza değişmeden kasıt alınan parametredir)
public class Urun
{
public Urun()
{
}
public Urun(string adi,decimal fiyat)
{
}
}
C# Garbage Collector :Aslında başlı başına bir makale konusu olan garbage collector yapısına çok kısa manada değinmek için paylaşıyorum.Bir proje üzerinde alınan instancelerin işleri bittiğinde ramin heap bölümünden silinmesi amaçıyla kullanılırlar.Basit manada bellek yönetimi içindir. IDisposable arayüzünü kullanan yıkıcı bir methoda sahip olan nesneden faydalanılır.Daha Detaylı bilgi için tıklayınız. Garbage Collector
Aşağıdaki linkten oop'a yönelik anlatımı gerçekleştirdiğim uygulamaya erişebilirsiniz.İçindeki yorum satırları umarım açıklayıcı olmuştur.yukarda bahsi geçen tüm kavramların nasıl kullanıldığına yönelik hatta farklı kullanımlarıda aynı anda görebilmeniz için yorum satırları ekledim.Umarım faydalı olur .İndirmek için Tıklayınız
Sınavlrın bitmesiyle birlikte yeniden blog üzerinde makale ,video ,proje ,uygulama vs. işlemlerini zaman bulabildikçe anlatmaya devam ediyor olacağım.Daha fazla lafı uzatmadan OOP hakkında daha önceden yapmış olduğumuz uygulamada eksik kalan bölümler ,kavramlar ve bunların bir uygulamaya dökülmesi noktasında bu makale üzerinden devam ediyor olacağım.
Nesne yönelimli programlamada (OOP) içersinde temel kavramlar ,temel kurallar olarak devam edelim.Ve sırası geldikçe bu kavramları ve kuralları ele alıp açıklamaya çalışalım.İlk aşamada bu işlemleri gerçekleştirirken makalenin sonunda ise paylaşılan örnek uygulamayı incelemenizi tavsiye ederim.OOP'u anlatırken basit manada belirli temel kavramları anlamtmak amacıyla başlamış olduğum bu makalede yeni başlayanlar için birçok özellik ve bir çok kural varmış gibi gözüksede kavramların matığını anlayarak ilerlemek ve yapmış olduğum yada internet ortamından yapılan detaylı örneklerle OOP'u anlamak ilerde yapılacak detaylı projelerde yada kendi projelerinizde hayat kurtarabilir.
OOP'u Anlamak
OOP için 5 Temel Öğe1)Class:Sınıf soyut bir veri tipidir.Nesne ise onun somutlaşan bir cismidir.Ram'in heap bölünde tututlur.Referans tiplidir (reference types ).Sınıf kavramı detaylı bir bölüm olduğu için örnek uygulamamızdan anlatmaya devam ediyor olacağım.Son olarak class içinde tanımlanabilecek temel anlamda kullanılan öğeler
1)fields(değişkenler)
2)Methodlar(constructor gibi yada Kullanıcı tanımlı methodlar)
3)Eventler
===Abstract Class==
1-a)Abstract Class Nedir?Ve özelliklerine nelerdir.
* Absctract classlar kendinden türeyen classlara base class olmak amacıyla yazılır
* Abstract classlar Absctract methodlar içerebilirler
* Abstract class içindeki abstract methodların gövdeleri yazılmaz.Abstract classdan türeyen sınıflar içinde implemente edilerek(zorunlu override işlemi) kullanılırlar.
* Abstract methodlar default olarak public access modifersina sahiptirler
* Abstract classlardan instance alınamaz
====Sealed Class======
1)Sealed Class:Mühürlenmiş anlamına gelir ve classın son halidir.Bu classdan miras alınamaz.
2)Interface:davranışların sınırlanması için yazılır.Amacı Kullanılacak classa rehberlik etmektir.Son olarak bir class en fazla bir class dan türetilebilirken(base class ve drived class mantığı) birden fazla interface'den türetilebinilir
========Basit Anlamda İnterfaceözellikleri=======
2-a) Interface ler yukarda bahsettiğim gibi Rehber görevi görürler. Yani içerisine herhangi bir kod parçası ekleyemeyiz. Sadece tnaımlama yaparız.
2-b)Bir Interface in tüm üyeleri Public kabul edilir. Private, Protected, Static gibi tanımlanamazlar.
2-c)Üyeleri public olarak ta tanımlayamayız, çünkü zaten hepsi public olarak tanımlanmış kabul edilir. Aksi halde hata alırız.
2-d)Bir arayüzü, başka bir arayüzden türetebiliriz, fakat bir Class tan yada Struct dan türetemeyiz.
2-e)Interface leri miras alan sınıflar, içerisinde tanımlanan tüm metodları Implemente etmek zorundadır.
2-f)interface tanımlarken interface verilen allianz isme I eklenerek Tanimlanir Örneğin IDepo gibi;
3)Struct:Aynı classlar gibi kullanılabilirler.Yani Sınıflardan farkı belleğin heap bölgesinde değil stack’te tutulmasıdır.bu yüzden classlara göre daha hızlıdırlar.İçlerinde Constructor,properties,field tanımlanabilinir.Kalıtım alamazlar.16byte yer kaplar
4)Enum:Sabit tanımlamalar için kullanılırlar.Ram'in stack bölgesinde bulunur.yani deger tiplidir.Default olarak int tipindedir.4 byte yer kaplar
5)Delegate:Delegate en basit anlamıyla metod referansıdır. Yani delegate metod referansını tutar.Örneğin mouse move,mouse up vs gibi Delegate tanımlanırken metodun geri dönüş değeri ve parametreleri belirlenir. Geri dönüş değerini void ve parametresiz tanımlamak da mümkündür. Kullanılacak metod, tanımlanmış olan delegate geri dönüş ve parametrelerine uygun olmalıdır.
OOP Kurallari
Encapsulation:Basit manada Class içindeki fieldsların dışardan erişimini engellemek için acces modifersleri private olarak işaretlerinip aynı fieldslar için oluşturulan propertieslere public access modifersleri verilerek kullanılır(Blog içersinde detaylı olarak video anlatım bulunmaktadır)
Inheritance:Kalıtım bir sınıfın tüm özellikleri ve methodlarının miras olarak alınmasıdır. (paylaşılan proje içindeki örneği inceleyiniz).
Polymorphizm:Biribirinden türeyen classların içindeki methodların isimleri aynı olması durumunda base classdaki method'un virtual anahtar kelimesi ile imzalanıp base classlardan türeyen drived classlarda basedeki methodun farklı davranması sağlanır.Bu işleme Polymorphizm(Çok Biçimlilik) denir
Constructor: C#'te herşey bir nesnedir. Nesne kavramını duyduğumuzda aklımıza gelen ilk şey Constructor(yapıcı) metottur. Çünkü bir nesnenin örneklenip Ram'e çıkabilmesi için constructor metot çağrısı yapılması gerekir.Constructor kullanım amacımız nesneye ilk değerini atayabilmek,Nesne kullanıcısını belirli bir değer vermeye zorlamak (method overload ile),Nesne oluşturulurken yapılacak işlemleri gerçekleştirebilmek
===============Constructor Özellikleri================
1-Geriye değer döndürmez.
2-İsmi,tiple aynı olmak zorundadır.
3-istenildiği bir anda çağrısı yapılamaz. Özel bir çağrılma biçimi vardır.
4-Nesne üretmek için çağırılan metottur. Constructor metot çağırılmadan heap'te nesne üretilemez.
AccessModifers
private :Sadece sınıf içinde kullanılabilinir.Amaç sınıfın içindeki fieldslara dışardan erişimi engellemektir
public:Proje içinde genel anlamda heryerden erişebilecek nesneler için Kullanılır
protected:Miras alınan sınıflarda kullanılabilinir.Amac basede ki classın özelliklerini sağlamak ve korumalı bir biçimde bu işlemi gerçekleştirmektir.
internal:Projedki nesnelerin kullanılabileceği ve başka projelerin kullanılmasına izin vermez.Örnek olarak namespace uzağı dır diyebiliriz
protected internal:Hem Proje içinde heryerde hemde miras alan heryerde kullanılabilinir
============Static Kavramı=====
Static :Yazmış olduğumuz projelerde tanımlanacak değişkenlere bazen projenin heryerinden erişmek isteyebiliriz.Bunu OOP'da static olarak tanımlanacak değişkenler ile yapabileceğimiz gibi farklı yöntemlerlede bu işlem gerçekleştirilebilinir.Fakat ele aldığımız bölüm static(durağan) olma kavramı olduğu için örneklendirerek devam edelim.Proje içinde classlardan birinde static olarak işaretlenen değişken o classdan instance almadan direk değer atama yöntemi ile gerçekleşebilinir.Paylaşılan projede detaylı inceleme yapabilirsiniz.
Method Overload :Method overload'ı açıklarken en güzel örnek class içindeki constructor'dır.Örneğin bir class oluşturduğunuzda default olarak varsayılan constructor boş olarak atanır. Ve Method Overload (Aşırı Yükleme) class içinde constructor method overload yapılacaksa (default) boş constructor tanımlanmalı ve classdan instance alınırken bu sefer new lediğinizde iki farklı kullanım gerçekleşicektir.tek şartı methodun imzasının değişmesidir(imza değişmeden kasıt alınan parametredir)
public class Urun
{
public Urun()
{
}
public Urun(string adi,decimal fiyat)
{
}
}
C# Garbage Collector :Aslında başlı başına bir makale konusu olan garbage collector yapısına çok kısa manada değinmek için paylaşıyorum.Bir proje üzerinde alınan instancelerin işleri bittiğinde ramin heap bölümünden silinmesi amaçıyla kullanılırlar.Basit manada bellek yönetimi içindir. IDisposable arayüzünü kullanan yıkıcı bir methoda sahip olan nesneden faydalanılır.Daha Detaylı bilgi için tıklayınız. Garbage Collector
Aşağıdaki linkten oop'a yönelik anlatımı gerçekleştirdiğim uygulamaya erişebilirsiniz.İçindeki yorum satırları umarım açıklayıcı olmuştur.yukarda bahsi geçen tüm kavramların nasıl kullanıldığına yönelik hatta farklı kullanımlarıda aynı anda görebilmeniz için yorum satırları ekledim.Umarım faydalı olur .İndirmek için Tıklayınız
03:18
abstract class
,
AccessModifers
,
constructor
,
Delegate
,
Encapsulation
,
Enum
,
Garbage Collector
,
Inheritance
,
Interface
,
Method Overload
,
OOP
,
Polymorphizm
,
sealed class
,
static
,
Struct
Nesne Yönelimli Programlama OOP Temelleri
Sinan Arslan
Merhaba Arakadaşlar,
Bu bölümde oop temellerine değiniyor olacağız.Bu aşamada aşağıda yaptığımız örnek uygulama içindeki classları paylaşıyor olacağım
OOP Temelleri paylaşan: sinan-d-arslan-1
Bu bölümde oop temellerine değiniyor olacağız.Bu aşamada aşağıda yaptığımız örnek uygulama içindeki classları paylaşıyor olacağım
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OopTemelleri { abstract public class Canlilar { #region Access Modifers /* public : public olarak işaretlenen öge kod blogu ve proje heryerden erişebilen access modifers dır private : private olarak tanımlanan öge sadece tanımladığı class içersinden yada o kod blogu erişebilinir * protected :protected olarak tanımlanan öge sadece tanımladığı class ve o class dan türemiş diğer class lardan erişebilinir * internal:Bulunduğu assembly (DDL veya exe )içinden erişebilinir * protected internal:bulunduğu classın içinden veya o classdan türemeiş diğer classlarda ve aynı (DDL veya exe)içinden (assembly)erişebilinir */ #endregion #region Fields private string _solunum; private string _beslenme; private string _ureme; private string _boşaltim; #endregion #region properties public string Beslenme { get { return _beslenme; } set { _beslenme = value; } } public string Boşaltim { get { return _boşaltim; } set { _boşaltim = value; } } public string Ureme { get { return _ureme; } set { _ureme = value; } } public string Solunum { get { return _solunum; } set { _solunum = value; } } #endregion public abstract void Beslen(); public abstract void Suic(); /* 1) Kendinden türeyecek classlara base olmak için yazılırlar * 2)Abstract metodların sadece gövdeleri yazılır kendinden türeyen classlarda zorunlu override işlemine tabi tutulur * 3)Abstract metodlar zorunlu public tir * Miras larak kullanılırlar */ } }
======================================================================
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OopTemelleri { public class Bitkiler:Canlilar { private string _fotosentez; public string Fotosentez { get { return _fotosentez; } set { _fotosentez = value; } } public override void Beslen() { throw new NotImplementedException(); } public override void Suic() { throw new NotImplementedException(); } } }
====================================================================
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OopTemelleri { public class Hayvan :Canlilar { private string _yuru; public string Yuru { get { return _yuru; } set { _yuru = value; } } public override void Beslen() { } public override void Suic() { } public virtual string YeniDogan() { return "Civciv"; } // virtual ezilebilir anlamı taşır } }
============================================================= using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OopTemelleri { sealed class Insan:Hayvan// mühürnlenmiş anlamına gelir { private string _dusun; public string Dusun { get { return _dusun; } set { _dusun = value; } } public override string YeniDogan() { return "bebek"; } #region polymorfizim //birbirinden türeyen classlar içerindeki metodların isimlerinin aynı olması durumunda basedeki metod virtual anahtar kelimesi ile imzalanır ve diger classda override edilerek farklı davranması sağlanabilinir.Buna çok biçimlilik denir #endregion } } ===================================================================
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace OopTemelleri { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Hayvan hvn = new Hayvan(); MessageBox.Show(hvn.YeniDogan()); } private void Form1_Load(object sender, EventArgs e) { Insan ins = new Insan(); MessageBox.Show(ins.YeniDogan()); } } }
Video Anlatımı
OOP Temelleri paylaşan: sinan-d-arslan-1
Kaydol:
Kayıtlar
(
Atom
)