- Yoksulluğu tüm biçimleriyle her yerde sonlandırın.
- Açlığı sonlandırın, gıda güvenliğini ve gelişmiş beslenmeyi sağlayın ve sürdürülebilir tarımı teşvik edin.
- Sağlıklı yaşamlar sağlayın ve her yaştan herkes için refahı teşvik edin.
- Kapsayıcı ve eşitlikçi kaliteli eğitim sağlayın ve herkes için yaşam boyu öğrenme fırsatlarını teşvik edin.
- Cinsiyet eşitliğini sağlayın ve tüm kadınları ve kızları güçlendirin.
- Herkes için su ve sanitasyonun mevcudiyetini ve sürdürülebilir yönetimini sağlayın.
- Herkes için uygun fiyatlı, güvenilir, sürdürülebilir ve modern enerjiye erişim sağlayın.
- Herkes için sürdürülebilir, kapsayıcı ve sürdürülebilir ekonomik büyümeyi, tam ve üretken istihdamı ve insana yakışır işi teşvik edin.
- Dayanıklı altyapı oluşturun, kapsayıcı ve sürdürülebilir sanayileşmeyi teşvik edin ve yeniliği teşvik edin.
- Ülkeler içinde ve arasında eşitsizliği azaltın.
- Şehirleri ve insan yerleşimlerini kapsayıcı, güvenli, dayanıklı ve sürdürülebilir hale getirin.
- Sürdürülebilir tüketim ve üretim kalıpları sağlayın.
- İklim değişikliği ve etkileriyle mücadele etmek için acilen harekete geçin.
- Sürdürülebilir kalkınma için okyanusları, denizleri ve deniz kaynaklarını koruyun ve sürdürülebilir şekilde kullanın.
- Karasal ekosistemlerin sürdürülebilir kullanımını koruyun, restore edin ve teşvik edin, ormanları sürdürülebilir bir şekilde yönetin, çölleşmeyle mücadele edin ve arazi bozulmasını durdurun ve tersine çevirin ve biyolojik çeşitlilik kaybını durdurun.
- Sürdürülebilir kalkınma için barışçıl ve kapsayıcı toplumları teşvik edin, herkes için adalete erişim sağlayın ve her düzeyde etkili, hesap verebilir ve kapsayıcı kurumlar inşa edin.
- Sürdürülebilir kalkınma için uygulama araçlarını güçlendirin ve küresel ortaklığı canlandırın.
Birleşmiş Milletler Sürdürülebilir 2030 Kalkınma Hedefleri (SKH)
SOLID Prensipleri -The Liskov Substitution Principle - Uncle Bob Çevirisi
Seri'nin diğer yazıları :
The Single Responsibility Principle
Open Closed Principle
3- The Liskov Substitution Principle
Burada istenen şu ikame özelliğine benzer bir şeydir: S tipindeki her bir o1 nesnesi için T tipinde bir O2 nesnesi varsa, T olarak tanımlanan tüm P programları için, o1 o2 yerine ikame edildiğinde P'nin davranışı değişmiyorsa, o zaman S, T'nin bir alt tipidir.
Bu ilkenin önemi, ihlal etmenin sonuçlarını düşündüğünüzde belirginleşir. LSP'ye uymayan bir metod varsa, bu metod bir temel sınıfa bir işaretçi veya başvuru kullanır, ancak bu temel sınıfın tüm alt sınıflarını bilmelidir. Böyle bir işlev Açık-Kapalı ilkesini ihlal eder, çünkü temel sınıfın yeni bir alt sınıfı oluşturulduğunda değiştirilmesi gerekir.
void DrawShape(const Shape& s) { if (typeid(s) == typeid(Square)) DrawSquare(static_cast < square > (s)); else if (typeid(s) == typeid(Circle)) DrawCircle(static_cast < circle > (s)); }
[Not: static_cast yeni cast operatörlerinden biridir. Bu örnekte normal bir cast gibi çalışır. yani DrawSquare ((Square &) s); Bununla birlikte, yeni sözdiziminin kullanımı daha güvenli ve grep gibi araçlarla bulunması daha katı kurallara sahiptir. Bu nedenle tercih edilir.]
Açıkçası DrawShape metodu kötü bir şekilde oluşturulmuştur. Shape sınıfının her olası alt sınıfı bilmeli ve yeni Shape alt sınıfları her oluşturulduğunda değiştirilmelidir. Gerçekten de birçoğu bu metodun yapısını Nesneye Dayalı Tasarıma lanetli olarak görmektedir.
Kare ve Dikdörtgen, Daha İnce Bir İhlal.
class Rectangle { public: void SetWidth(double w) {itsWidth=w;} void SetHeight(double h) {itsHeight=w;} double GetHeight() const {return itsHeight;} double GetWidth() const {return itsWidth;} private: double itsWidth; double itsHeight; };
void Square::SetWidth(double w) { Rectangle::SetWidth(w); Rectangle::SetHeight(w); } void Square::SetHeight(double h) { Rectangle::SetHeight(h); Rectangle::SetWidth(h); }
Square s; s.SetWidth(1); // Fortunately sets the height to 1 too. s,SetHeight(2); // sets width and heigt to 2, good thing. Ama aşağıdaki fonksiyonu bir düşünün void f(Rectangle r) { r.SetWidth(32); // calls Rectangle::SetWidth }
class Rectangle { public: virtual void SetWidth(double w) {itsWidth=w;} virtual void SetHeight(double h) {itsHeight=h;} double GetHeight() const {return itsHeight;} double GetWidth() const {return itsWidth;} private: double itsHeight; double itsWidth; }; class Square : public Rectangle { public: virtual void SetWidth(double w); virtual void SetHeight(double h); }; void Square::SetWidth(double w) { Rectangle::SetWidth(w); Rectangle::SetHeight(w); } void Square::SetHeight(double h) { Rectangle::SetHeight(h); Rectangle::SetWidth(h); }
void g(Rectangle& r) { r.SetWidth(5); r.SetHeight(4); assert(r.GetWidth() * r.GetHeight()) == 20); }
Geçerlilik İçsel Değildir
Ne yanlış gitti?
Sözleşmeye Göre Tasarım (Design By Contract)
Açık-Kapalı prensibi, OOD için yapılan iddiaların çoğunun kalbinde yer alır. Bu ilke yürürlükte olduğunda, uygulamalar daha sürdürülebilir, tekrar kullanılabilir ve sağlamdır. Liskov İkame İlkesi (Diğer adıyla Sözleşmeli Tasarım (Design by Contract)), Açık-Kapalı prensibine uyan tüm programların önemli bir özelliğidir. Sadece alt sınıflar temel tipleri için tamamen ikame edildiğinde, bu temel sınıfları kullanan metodlar cezasızlıkla yeniden kullanılabilir ve alt tipler cezasızlıkla değiştirilebilir.
Learn English with Alex
Sonra Alex ile tanıştım. 2 ay boyunca 40 akademik saat ders yaptık.
Kendisi az Türkçe biliyor. Hemen hemen hiç Türkçe konuşmadık.
Her konuda konuştuk, bolca pratik yaptık. Her ders öncesi Extra English sitcom dizisinden bir bölüm izleyip kendisine reported speech yaptım. Ayrıca bir ödevim de McMillian'ın Destination B1 Grammar & Vocabulary kitabından bir ünite bitirmekti. Bir dönem IELTS Academic sınavına da hazırladı beni, fakat çok vakit bulamadığımdan bunu ileri bir tarihe erteledik.
Genel olarak İngilizcem farkedilir derecede iyileşti. Konuşurken özgüvenim arttı ve iyi bir arkadaş edinmiş oldum.
Kendisi anne tarafından İngiliz, baba tarafından Rus ve eşi Türk. Hindistan'da eğitim görmüş. Yani birçok kültürden sizinle sohbet etmek için tecrübesi var.
Siz de kendisinden ders almak isterseniz, bu grup dersi de olabilir, kendisine aşağıdaki numaradan ulaşabilirsiniz.
530 238 71 17
Açık Kaynak Tanımı ile Özgür Yazılım Tanımı Karşılaştırma
Açık Kaynak Tanımı ile Karşılaştırma
Özgür yazılım hareketi ve açık kaynaklı yazılım hareketi arasındaki felsefi farklılıklara rağmen, FSF tarafından ücretsiz yazılım ve OSI tarafından açık kaynaklı yazılımın resmi tanımları, birkaç küçük istisna dışında, temelde aynı yazılım lisanslarına atıfta bulunur. . Özgür Yazılım Vakfı, felsefi farklılıkları vurgularken şu yorumu yapıyor:
"Açık kaynaklı" yazılım terimi, bazı kişiler tarafından özgür yazılımla aşağı yukarı aynı kategoriyi ifade etmek için kullanılır. Tam olarak aynı yazılım sınıfı değildir: çok kısıtlayıcı olduğunu düşündüğümüz bazı lisansları kabul ederler ve kabul etmedikleri özgür yazılım lisansları vardır. Ancak, kategorinin genişletilmesindeki farklılıklar küçüktür: neredeyse tüm özgür yazılımlar açık kaynaklıdır ve neredeyse tüm açık kaynaklı yazılımlar özgürdür.
— Özgür Yazılım Vakfı
Özgür Yazılımın Dört Temel Özgürlüğü - wikipedia.org ÇEVİRSİ
Özgür Yazılımın Dört Temel Özgürlüğü
FSF tarafından Şubat 1986'da yayınlanan tanımda iki nokta vardı:
Adımızdaki "FREE" kelimesi fiyat anlamına gelmez; özgürlüğe atıfta bulunur. Birincisi, bir programı kopyalama ve komşularınıza yeniden dağıtma özgürlüğü, böylece onlar da sizin kadar iyi kullanabilirler. İkincisi, programın sizi kontrol etmesi yerine sizin kontrol edebilmeniz için bir programı değiştirme özgürlüğü; bunun için kaynak kodun size sunulması gerekir.
1996'da, gnu.org web sitesi başlatıldığında, "özgür yazılım", yazılımı inceleme özgürlüğünden (iki noktalı tanımda şu şekilde okunabilir) açık bir söz eklenerek "üç özgürlük düzeyine" atıfta bulunularak tanımlandı. Stallman daha sonra "seviye" kelimesinden kaçınarak tüm özgürlüklerin gerekli olduğunu, dolayısıyla seviyeler açısından düşünmenin yanıltıcı olduğunu söyledi.
Son olarak, kullanıcıların programı çalıştırabilmesi gerektiğini açıkça söylemek için başka bir özgürlük eklendi. Mevcut özgürlükler zaten birden üçe numaralandırılmıştı, ancak bu özgürlük diğerlerinden önce gelmeliydi, bu yüzden "özgürlük sıfır" olarak eklendi.
Modern tanım, özgür yazılımı, alıcının aşağıdaki dört özgürlüğe sahip olup olmadığına göre tanımlar:
Programı istediğiniz gibi, herhangi bir amaç için çalıştırma özgürlüğü (özgürlük 0).
Programın nasıl çalıştığını inceleme ve bilgisayarınızı istediğiniz gibi yapması için değiştirme özgürlüğü (özgürlük 1). Kaynak koduna erişim bunun için bir ön koşuldur.
Komşunuza yardım edebilmeniz için kopyaları yeniden dağıtma özgürlüğü (özgürlük 2).
Değiştirilmiş sürümlerinizin kopyalarını başkalarına dağıtma özgürlüğü (özgürlük 3). Bunu yaparak, tüm topluluğa değişikliklerinizden yararlanma şansı verebilirsiniz. Kaynak koduna erişim bunun için bir ön koşuldur.
Richard Stallman tarafından yazılan ve Özgür Yazılım Vakfı (FSF) tarafından yayınlanan Özgür Yazılım Tanımı, özgür yazılımı, son kullanıcıların bu yazılımı kullanma, inceleme, paylaşma ve değiştirme özgürlüğüne sahip olmasını sağlayan yazılım olarak tanımlar. "Özgür" terimi, "ücretsiz" değil, "özgür konuşma" anlamında kullanılır. Tanımın bilinen en eski yayını, FSF tarafından artık durdurulan GNU's Bulletin yayınının Şubat 1986 baskısındaydı. Belgenin kanonik kaynağı, GNU Projesi web sitesinin felsefe bölümündedir. Nisan 2008 itibariyle burada 39 dilde yayınlanmaktadır. FSF, bu tanıma uyan lisansların bir listesini yayınlar.
Açık Kaynak Tanımı (The Open Source Definition) - opensource.org çevirisi
Açık Kaynak Tanımı
Tanıtım
Açık kaynak sadece kaynak koduna erişim anlamına gelmez. Açık kaynaklı yazılımın dağıtım koşulları aşağıdaki kriterlere uygun olmalıdır:
1. Ücretsiz Yeniden Dağıtım
Lisans, herhangi bir tarafı, yazılımı birkaç farklı kaynaktan programları içeren toplu bir yazılım dağıtımının bir bileşeni olarak satmasını veya başka birine vermesini kısıtlamaz. Lisans, bu tür bir satış için telif hakkı veya başka bir ücret gerektirmez.
2. Kaynak Kodu
Program kaynak kodu içermeli ve kaynak kodun yanı sıra derlenmiş formda dağıtıma izin vermelidir. Bir ürünün herhangi bir biçiminin kaynak koduyla dağıtılmadığı durumlarda, kaynak kodunu makul bir çoğaltma maliyetinden fazla olmayan, tercihen İnternet üzerinden ücretsiz olarak indirerek elde etmenin iyi tanıtılmış bir yolu olmalıdır. Kaynak kodu, bir programcının programı değiştireceği tercih edilen form olmalıdır. Kasıtlı olarak karıştırılmış kaynak koduna izin verilmez. Bir önişlemcinin veya çevirmenin çıktısı gibi ara formlara izin verilmez.
3. Türetilmiş İşler
Lisans, değişikliklere ve türetilmiş çalışmalara izin vermeli ve bunların orijinal yazılımın lisansı ile aynı koşullar altında dağıtılmasına izin vermelidir.
4. Yazarın Kaynak Kodunun Bütünlüğü
Lisans, kaynak kodunun değiştirilmiş biçimde dağıtılmasını ancak lisans, "yama dosyalarının" kaynak kodla birlikte, derleme sırasında programı değiştirmek amacıyla dağıtılmasına izin veriyorsa kısıtlayabilir. Lisans, değiştirilmiş kaynak koddan oluşturulan yazılımın dağıtımına açıkça izin vermelidir. Lisans, türetilmiş çalışmaların orijinal yazılımdan farklı bir ad veya sürüm numarası taşımasını gerektirebilir.
5. Kişi ve Gruplara Karşı Ayrımcılık Yapılmaması
Lisans, herhangi bir kişi veya kişi grubuna karşı ayrımcılık yapmamalıdır.
6. Çalışma Alanlarına Karşı Ayrımcılık Yapılmaması
Lisans, hiç kimsenin programı belirli bir çalışma alanında kullanmasını kısıtlamamalıdır. Örneğin, programın bir işletmede kullanılmasını veya genetik araştırmalar için kullanılmasını kısıtlayamaz.
7. Lisansın Dağılımı
Programa bağlı haklar, bu taraflarca ek bir lisans yürütülmesine gerek kalmadan programın yeniden dağıtıldığı herkese uygulanmalıdır.
8. Lisans Bir Ürüne Özel Olmamalıdır
Programa eklenen haklar, programın belirli bir yazılım dağıtımının parçası olmasına bağlı olmamalıdır. Program bu dağıtımdan çıkarılırsa ve programın lisans koşulları dahilinde kullanılır veya dağıtılırsa, programın yeniden dağıtıldığı tüm taraflar, orijinal yazılım dağıtımıyla bağlantılı olarak verilenlerle aynı haklara sahip olmalıdır.
9. Lisans Diğer Yazılımları Kısıtlamamalıdır
Lisans, lisanslı yazılımla birlikte dağıtılan diğer yazılımlara kısıtlama getirmemelidir. Örneğin, lisans aynı ortamda dağıtılan diğer tüm programların açık kaynaklı yazılım olması konusunda ısrar etmemelidir.
10. Lisans Teknolojiden Tarafsız Olmalıdır
Lisansın hiçbir hükmü, herhangi bir bireysel teknolojiye veya arayüz stiline dayandırılamaz.