The Anorak
Gigapat
- Katılım
- 2 Mart 2014
- Mesajlar
- 6.679
- Makaleler
- 1
- Çözümler
- 128
Oop'yi sadece klasör, kısayol olarak düşünmeyin. Çok şekillilik ve kalıtım işleri belli durumlarda çok kolaylaştırabiliyor.
Ayrıca nesne yönelimli olmak kodların tekrar kullanılabilirliğini artırır ve tekrarı azaltır.
Bir işi yapan bir a class'ınız olsun. Sadece belli bir kısmını değiştirerek yeni bir b class(obje)'ı oluşturmak istediğiniz zaman. B'yi A'dan kalıtıp (ınheritance, extend). B'nin A'dan farklı olmasını istediğiniz şeyleri override edersiniz. Böylece b için A'da zaten bulunan kodları tekrardan yazmamış olursunuz. Class içerisinde Access modiferları(private, public, protected, package private gibi) düzgün ayarlamışsanız(encapsulation). Diğer objelerin A ve B objesinin sahip olduğu değişkenlere ve prosedürlere erişimini kısıtlamış olursunuz.
Daha anlatmak istediğim çok şey var ama varsayım yerine bir örnek üzerinden anlatmam gerekiyor.
Böyle anlatınca bayağı havada kalıyor.
x <- 54
def __init__()
datetime.datetime.now()
gibi bir yapıyı kim nasıl mantıklı gördü? Ve diğerleri buna nasıl izin verdiler?import java.util.ArrayList;
public class Main
{
public static void main(String[] args)
{
ArrayList<Shape> myShapes = new ArrayList<>();
myShapes.add(new Square(25));
myShapes.add(new Circle(50));
myShapes.add(new Rectangle(10, 30));
myShapes.add(new Circle(76));
myShapes.add(new Square(314));
for (Shape shape : myShapes)
{
System.out.printf("%s's Area = %.3f; Perimeter = %.3f\n", shape, shape.getArea(), shape.getPerimeter());
}
}
}
import javafx.geometry.Point2D;
public abstract class Shape
{
protected String name;
protected double x;
protected double y;
public Point2D getCoordinate()
{
return new Point2D(this.x, this.y);
}
public void setCoordinate(double x, double y)
{
this.x = x;
this.y = y;
}
public void setCoordinate(Point2D coor)
{
setCoordinate(coor.getX(), coor.getY());
}
public abstract double getPerimeter();
public abstract double getArea();
@Override
public String toString()
{
return this.name;
}
}
public class Square extends Shape
{
private double edge;
public Square(double edge)
{
setEdge(edge);
this.name = "Square";
}
public Square()
{
this(0);
}
public void setEdge(double edge)
{
if (edge < 0)
{
this.edge = 0; // Length can not be Negative Value!
} else
{
this.edge = edge;
}
}
public double getEdge()
{
return this.edge;
}
@Override
public boolean equals(Object obj)
{
return (this.edge == ((Square) obj).getEdge());
}
@Override
public double getPerimeter()
{
return 4 * this.edge;
}
@Override
public double getArea()
{
return Math.pow(edge, 2);
}
}
public class Rectangle extends Shape
{
private double edgeA;
private double edgeB;
public Rectangle()
{
this(0, 0);
}
public Rectangle(double edgeA, double edgeB)
{
setEdgeA(edgeA);
setEdgeB(edgeB);
this.name = "Rectangle";
}
public void setEdgeA(double edge)
{
if (edge < 0)
{
this.edgeA = 0; // Length can not be Negative Value!
} else
{
this.edgeA = edge;
}
}
public void setEdgeB(double edge)
{
if (edge < 0)
{
this.edgeB = 0; // Length can not be Negative Value!
} else
{
this.edgeB = edge;
}
}
public double getEdgeA()
{
return this.edgeA;
}
public double getEdgeB()
{
return this.edgeB;
}
@Override
public boolean equals(Object obj)
{
return (this.edgeA == ((Rectangle) obj).getEdgeA() &&
this.edgeB == ((Rectangle) obj).getEdgeB());
}
@Override
public double getPerimeter()
{
return 2 * (this.edgeA + this.edgeB);
}
@Override
public double getArea()
{
return this.edgeA * this.edgeB;
}
}
public class Circle extends Shape
{
private double radius;
public Circle()
{
this(0);
}
public Circle(double radius)
{
setRadius(radius);
this.name = "Circle";
}
public void setRadius(double radius)
{
if (radius < 0)
{
this.radius = 0;
} else
{
this.radius = radius;
}
}
public double getRadius()
{
return this.radius;
}
@Override
public boolean equals(Object obj)
{
return (this.radius == ((Circle) obj).getRadius());
}
@Override
public double getPerimeter()
{
return 2 * Math.PI * this.radius;
}
@Override
public double getArea()
{
return Math.PI * Math.pow(this.radius, 2);
}
}
Herkes Python için okuması kolay deyince bende mi sıkıntı var da hoşuma gitmiyor diyordum. Meğer benlik bir durum değilmiş sadece.Python'un syntax'ı benim de gözümü yoruyor. Ben girinti saymak istemiyorum. Ver bana curly bracketi istediğim yerde başlatıp bitireyim.
Beni o kodda 2 sey rahatsiz etti:Yorumlanması da ayrı bir dert. Çok kritik bir hatayı RunTime'da fark etmek baya kötü oluyor.
White Space sorunu var ayrıca. Bazı yorumlama ortamları Tab'ları 4 space'e çevirebiliyor.
Ama bazıları Tab'ı tab olarak tuttuğu için garip buglar oluşabiliyor.
Veya gözden kaçırıp 4 yerine 3 boşluk atınca yorumlayıcı o kısımı girintiden saymıyor.
Noktalı virgül gibi satır bitirme sembolü olmadığı için benim sıkça kullandığım line break Python'da işkenceye dönüşüyor. \ istiyor her kırılan satır için;
Eki Görüntüle 659079
Bu yapı daha hoşuma gidiyor şahsen.
Hayir.@bitwise dostum dlang biliyor musun?