Herkese merhaba,
Bugünkü konumuz OOP(Object Oriented Programming) ilkeleri. Türkçesi Nesne Yönelimli Programlama(NYP). Ben C# ile anlatmaya çalıştım ama çoğu high-level dilde bulunur.
OOP, programlamanın temel ilkelerinden biridir. Programın sürdürülebilirliğini arttırmayı amaçlar. Mantık olarak programın nesneler ile bağlantı kurularak çalışması prensibine dayanır. Kodların parçalar haline getirilip, çıktı olarak verilebilmesine olanak sağlar.
Örneğin bu program da aynı işlevi sağlar:
bu program da:
Fark ettiğiniz üzere ikinci program daha okunaklı. Ayrıca bu programa gerektiğinde ekleme yapmak(sürdürülebilirlik) çok kolaydır.
OOP'nin genel mantığını anladığınıza göre şimdi OOP ilkelerine geçebiliriz.
Ve bunları
Son olarak
ve çalıştıralım:
Görmüş olduğunuz gibi kalıtım ile özellikleri classlara tanımladık ve bu özelliği kullandık. Bu ilke sürdürülebilirlik açısından önemli bir ilke.
Bu sınıfımızda
Bunu çalıştırırsak:
çıktı bu şekilde olur.
Örnek proje için: GitHub - userdotcs/Car-Sales-Project-For-the-OOP-Principles-Article
Umarım yardımcı olabilmişimdir. Sorularınızı sorabilirsiniz.
Bugünkü konumuz OOP(Object Oriented Programming) ilkeleri. Türkçesi Nesne Yönelimli Programlama(NYP). Ben C# ile anlatmaya çalıştım ama çoğu high-level dilde bulunur.
OOP, programlamanın temel ilkelerinden biridir. Programın sürdürülebilirliğini arttırmayı amaçlar. Mantık olarak programın nesneler ile bağlantı kurularak çalışması prensibine dayanır. Kodların parçalar haline getirilip, çıktı olarak verilebilmesine olanak sağlar.
Örneğin bu program da aynı işlevi sağlar:
C#:
//SOLID ve OOP'ye aykırı bir program örneği
using System;
public class HelloWorld
{
public static void Main(string[] args)
{
string FirstPersonName = "ExampleName";
string FirstPersonSurname = "ExampleSurname";
string SecondPersonName = "ExampleName2";
string SecondPersonSurname = "ExampleSurname2";
Console.WriteLine ($"Name: {FirstPersonName}\n" +
$"Surname: {FirstPersonSurname}\n\n" +
$"Name: {SecondPersonName}\n" +
$"Surname: {SecondPersonSurname}");
}
}
C#:
//Doğru kod örneği
using System;
public class Person
{
public string Name, Surname;
public Person(string _name, string _surname)
{
this.Name = _name;
this.Surname = _surname;
}
}
public class HelloWorld
{
public static void Main(string[] args)
{
Person FirstPerson = new Person("Halil", "Haliloglu");
Person SecondPerson = new Person("Kamil", "Kamiloglu");
Console.WriteLine ($"Name: {FirstPerson.Name}\n" +
$"Surname: {FirstPerson.Surname}\n\n" +
$"Name: {SecondPerson.Name}\n" +
$"Surname: {SecondPerson.Surname}");
}
}
OOP'nin genel mantığını anladığınıza göre şimdi OOP ilkelerine geçebiliriz.
- Inheritance(Miras ve kalıtım):
Quadrilateral
olsun ve dörtgenlerin ortak özelliği olan bazı özellikleri içersin(Ben alanı bulma ve yüksekliği tanımladım. Onun dışında istediğiniz tanımı yapabilirsiniz.):
C#:
abstract class Quadrilateral
{
public float height;
public abstract float GetSize();
}
Quadrilateral
ile türeteceğimiz sınıflar(yani dikdörtgen ve kareyi temsil edecek sınıf) olsun. Bunlara Quadrilateral
kalıtımını vererek bu sınıftaki temel özellikleri sınıflarımız için türetebiliyoruz.
C#:
class Square: Quadrilateral
{
public Square(float _height)
{
this.height = _height;
}
public override float GetSize()
{
return height * height;
}
}
class Rectangle: Quadrilateral
{
public float width;
public Rectangle(float _height, float _width)
{
this.height = _height;
this.width = _width;
}
public override float GetSize()
{
return height * width;
}
}
Main
metodumuzu da yazalım:
C#:
class MainClass
{
public static void Main(string[] args)
{
Square square = new Square(3f);
Rectangle rectangle = new Rectangle(5f, 7.5f);
Console.WriteLine($"Square Size: {square.GetSize()}\n" +
$"Rectangle Size: {rectangle.GetSize()}");
}
}
Görmüş olduğunuz gibi kalıtım ile özellikleri classlara tanımladık ve bu özelliği kullandık. Bu ilke sürdürülebilirlik açısından önemli bir ilke.
- Polymorphism(Çok biçimlilik):
GetSize()
aynı işlevi yapsa bile her nesnede farklı şekilde yapmıştır. Örneğin aşağıdaki classta her constructorda tanım yapılmıştır ama tanım şekli farklıdır:
C#:
class Car
{
public float Speed;
public int NumberOfSeat;
public string Horn;
public Car(float _speed)
{
this.Speed = _speed;
this.Horn = "Düt Düt";
this.NumberOfSeat = 5;
}
public Car(float _speed, string _horn)
{
this.Speed = _speed;
this.Horn = _horn;
this.NumberOfSeat = 5;
}
public Car(float _speed, string _horn, int _seatcount)
{
this.Speed = _speed;
this.Horn = _horn;
this.NumberOfSeat = _seatcount;
}
public void PlayHorn()
{
Console.WriteLine(Horn);
}
}
- Abstraction(Soyutlama):
C#:
abstract class PenType
{
public abstract void Write();
}
class Pen: PenType
{
float PercentOfInk = 100f;
public override void Write()
{
//Write
PercentOfInk-=1f;
}
}
class Pencil: PenType
{
float TipLenght = 10f;
public void ChaneTip()
{
TipLenght = 10f;
}
public override void Write()
{
//Write
TipLenght-=0.5f;
}
}
- Encapsulation(Kapsülleme):
C#:
class User
{
private string name = "kullanici.cs";
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
}
name
değerini private yaptık ama bu değişkene erişebilmek için farklı bir Name
tanımladık. Bu Name
değeri sayesinde name
değişkeni üzerinde değişiklik yapabiliyoruz ve değişkeni kullanabiliyoruz. get
ile döndürülecek değeri, set
ile atama değeri value olarak name
değişkenine atama yaptık.
C#:
class MainClass
{
public static void Main(string[] args)
{
User FirstUser = new User();
FirstUser.Name = "ExampleName";
Console.WriteLine(FirstUser.Name);
}
}
çıktı bu şekilde olur.
Örnek proje için: GitHub - userdotcs/Car-Sales-Project-For-the-OOP-Principles-Article
Umarım yardımcı olabilmişimdir. Sorularınızı sorabilirsiniz.
Son düzenleyen: Moderatör: