Bilindiği üzere Java'da ve diğer nesne tabanlı programlama dillerinde sınıfların değişkenlerine doğrudan erişime izin verilmez ve public olarak tanımlanan getter ve setter metotları ile bu değişkenlere erişimler sağlanır. Değişkenin public olarak tanımlanıp değişkenin değerinin değiştirilmesi ile getter ve setter metotlarının tanımlanıp değişkenin değerinin değiştirilmesi arasında bir fark yoktur. Bu işlemin bu şekilde yapılmasının bir amacı vardır. Bu amaç sınıfın değişkenlerinin alabileceği değerleri kontrol etmektir. En basitinden bir örnek vermek gerekirse insan sınıfının yaş değişkeninin eksi bir değer almasını istemeyiz. Doğrudan değişkene erişim olduğunda bu değişkenin değeri hesap edemediğimiz bir şekilde eksi bir değer alabilir. Ancak biz getter ve setter metotları ile bu değişkene erişimi sağlarsak bu metotların içerisinde değişkene atanacak değerleri kontrol ettirebiliriz. Java ve diğer nesne tabanlı programlama dillerinde kullanılan getter ve setter metotlarının ana amacı budur.
TÜRKÇE KAYNAKLAR
Microsoft Açık Akademi
https://www.acikakademi.com/portal/default.aspxMicrosoft'un oluşturduğu ücretsiz online uygulama geliştirme okulu. C# uygulaması, HTML & CSS, ve ASP.NET MVC eğitimlerini de burada bulabilirsin.
Turkcell Geleceği Yazanlar
https://gelecegiyazanlar.turkcell.com.tr/Android, iOS, Windows Phone üzerine mobil eğitimler, uygulama servisleri ve web programlama ile ilgili ücretsiz dersleri alabileceğin bir platform.
Udemy
www.udemy.comUdemy ağırlıklı olarak İngilizce ve ücretli açık dersler sunsa da Türkçe bazı dersleri bulunmakta. Örneğin Java ve ASP-NET derslerini Türkçe ve ücretsiz olarak alabilirsin.
istihza.com
http://www.istihza.com/istihza.com, Python programlama dili için bir Türkçe kaynak oluşturma projesi.
Çizgi-TAGEM
http://www.cizgi-tagem.org/Çizgi-TAGEM, kar amacı gütmeden çalışan gönüllü hocalarıyla Türkiye’nin bilişim sektöründe çalışan veya bu konulara meraklı kişilere ücretsiz uzaktan öğrenim imkanı sağlar. 1800 saatin üzerinde görsel eğitim ve 90.000 sayfa üzerinde eğitim belgesi TÜBİTAK desteğiyle ULAKBIM sunucuları üzerinde barındırılır.
Bilişime Giriş, MS Office ve Uygulama Programları, Bilgisayar Donanım ve Ağ Teknolojileri, Bilgisayar Mühendisliği ve Gömülü Sistemler, Yazılım Mühendisliği ve Bilişim Güvenliği Eğitimleri vb. eğitimlere ücretsiz olarak bu siteden ulaşabilirsiniz.
PHPNet
http://php.net/manual/tr/getting-started.phpPHPNet Resmi PHP sitesinin ve Türkiye2den katkıda bulunan gönüllülerin hazırlamış olduğu Türkçe PHP kılavuzdur.
Ruby Topluluğu
http://www.ruby-lang.org/tr/community/Türkiye’de Ruby topluluğu tarafından Türkçeleştirilen ve derlenen ve Ruby hakkında bilgilere erişebileceğiniz bir kaynaktır.
Scratch
https://scratch.mit.edu/Kendi etkileşimli hikaye, oyun ve animasyonlarınızı programlayabileceğiniz, özellikle 8-16 yaş aralığındakiler için hazırlanmış bir program. Çok dilli desteği içerisinde Türkçe’de yer alıyor. Scratch editörü ile çevrimiçi veya çevrimdışı kullanılabiliyorsunuz.
İNGİLİZCE KAYNAKLAR
Codecademy
https://www.codecademy.comCodecademy pek çok yazılım dilini hem ücretsiz hem de eğlenceli şekilde öğretiyor. HTML & CSS, Ruby on Rails, Java, JavaScript, Python, PHP gibi farklı programlama dillerini buradan öğrenebilirsin.
Coursera
https://www.coursera.orgÇoğunlukla dünyanın seçkin üniversiteleri tarafından hazırlanan ve pek çok yazılım dilinin öğretildiği kursları bu sitede bulabilirsin. Ücretli kurslar olabildiği gibi içeriklerin bir kısmını ücretsiz de tamamlamak mümkün.
Coursera’nın en çok beğenilen ve bizim de önerdiğimiz ders şöyle:
An Introduction to Interactive Programming in Python
edX
https://www.edx.org/
MIT ve Harvard Üniversiteleri tarafından başlatılan edX, kitlesel açık kaynaklardan bir diğeri. Üniversite seviyesinde pek çok alanda kursları ücretsiz alabilmek mümkün.
edX’in en çok beğenilenlerinden olan ve bizim de önerdiğimiz ders şöyle:
Introduction to Computer Science and Programming Using Python
Mobile Developer – IOS
Detaylı açıklama için tıklayın (İngilizce)
How to make an iOS App (Udacity)
https://www.udacity.com/course/how-to-make-an-ios-app–ud607
Udacity’nin iOS uygulama geliştilmesinin anlatan ücretsiz ve ileri seviye kursu. Kursun tamamlanması yaklaşık 3 ay alacaktır.
Learn the Essentials of Swift (Apple)
https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson1.html
Apple’ın resmi kaynağı kendini Swift ile kodlama konusunda eğitebileceğin en iyi kaynaklardan.
Learn Objective-C
http://cocoadevcentral.com/d/learn_objectivec/
Bu kısa ve öz kaynak Objective-C ile ilgili temel bilgileri sağlayacak. İlerlemek için örnek projeyi indirebilirsin.
LearnSwift.tips
http://www.learnswift.tips/
Ücretli ve ücretsiz çeşitli Swift öğrenme kaynaklarını bünyesinde toplayan kaynak.
Stanford – Developing iOS 9 Apps with Swift
https://www.youtube.com/playlist?list=PLsJq-VuSo2k26duIWzNjXztkZ7VrbppkT
Stanford Üniversitesi’nin düzenlediği dersleri video şeklinde izleyebilirsin.
Mobile Developer – Android
Detaylı açıklama için tıklayın (İngilizce)
Build Your First Android App (Google)
https://developer.android.com/training/basics/firstapp/index.html
Google kendi resmi sitesinde, yazılımcılara Android ile sıfırdan başlayarak ilk uygulamalarını nasıl yaratabilecekleri detaylarıyla anlatılıyor.
Developing Android Apps – Android Fundamentals (Udacity)
https://www.udacity.com/course/developing-android-apps–ud853
Udacity üzerinden Google’ın kendi oluşturduğu 1 saatlik ücretsiz Android ile geliştirme dersi.
Codepath – Android Topluluğu
http://guides.codepath.com/android
Android ile sıfırdan başlayanlar ve uzman yazılımcıları bir araya getiren, yazımlıcılara geliştirme ve test kaynakları da sağlayan Android topluluğu.
Reddit – Android Yazımlımcıları Topluluğu
https://www.reddit.com/r/androiddev
Android yazılımcılarını bir araya getiren, yazılım geliştirme sırasında karşılaşılan konuların, soruların tartışılabileği Android topluluğu.
Front-end Developer – HTML/CSS/Javascript
Detaylı açıklama için tıklayın (İngilizce)
HTML ve CSS’e Giriş Dersleri (Udacity)
https://www.udacity.com/course/intro-to-html-and-css–ud304
Udacity üzerinden ücretsiz web geliştirmeye giriş dersi. Yeni başlayanlar için temel bir kaynak.
Web Tasarımı Temelleri (Udacity)
https://www.udacity.com/course/intro-to-html-and-css–ud304
Udacity üzerinden ücretsiz web tasarımı temelleri dersi. HTML ve CSS Giriş dersinin üzerine web tasarımı hakkında detaylı bilgilenmek isteyenler için birebir.
TCP, IP ve Diğer Protokoller (Udacity)
https://www.udacity.com/course/networking-for-web-developers–ud256
Udacity üzerinden ücretsiz web teknolojileri ve web protokollerine giriş dersi. Web nasıl çalışır diye merak ediyorsanız, bu kaynağa mutlaka bakmalısınız.
Bootstrap’a Giriş (edX)
https://www.edx.org/course/introduction-bootstrap-tutorial-microsoft-dev203x-0
edX’in web geliştirmecilerine Bootstrap kullanımı ve geliştirme alanları için verdiği ücretsiz ders.
Back-end Developer – PHP
Bu alan hakkında biraz arkaplan ve bu seviyede öğrenmen gerekenler için şuraya tıklayın(ingilizce).
Learn PHP (Codecademy)
https://www.codecademy.com/learn/php
Codecademy’nin bu ücretsiz kursunda PHP ile ilgili tüm gerekenleri öğrenin.
Learn PHP
http://www.learn-php.org/
PHP’ye giriş için güzel ve kullanışlı bir websitesi.
PHP.net Dili Referansları (PHP Resmi Sitesi)
http://php.net/manual/en/langref.php
PHP kullanımına dair gerekli tüm detayları bulabileceğiniz PHP.net’in resmi internet sitesi.
PHP The Right Way (Orta Seviye)
http://www.phptherightway.com/
PHP hakkında en güncel bilgileri bulabileceğiniz, PHP kullanımına dair deneyimlerin paylaşıldığı referans bir websitesi. Genel olarak orta ve ileri seviye PHP geliştirmecilerine hitap ediyor.
Intro to Java (Udacity)
https://www.udacity.com/course/intro-to-java-programming–cs046
Udacity’ nin Java Programlama diline giriş dersi. San Jose Üniversitesi tarafından geliştirilmiş olup standart bir bilgisayar programlama ders programını takip eder. Derse erişim ücretsiz olup dersin tamamlanması yaklaşık 4 ay sürecektir.
LaunchCode Java Class
https://github.com/MoMenne/launchcode-java-class
Bu ders Java Programlama diline giriş dersi olmasına rağmen daha cok problem ve alıştırma odaklı olup Java programlama dilini uygulayarak öğrenmek isteyenler için idealdir.
Zero Effort Spring Boot (Video)
https://www.youtube.com/watch?v=cTPAKMIm_pM&list=PLgGXSWYM2FpOa_FTla-x5Wd10dpmgrRC4
Java dilini kullanan programcılar için tasarlanmış çok sayıda web modeli mevcut. Spring ise bunlar içersinde en çok kullanılanı. Bu video Spring le tanışmak için çok iyi bir fırsat.
CS50 Finance Java (Spring) Project
https://github.com/launchcode-rebootu/cs50-finance-java
CS50 dersinde kullanılan bir problemi Java dilinde Spring kullanarak yapmanız isteniyor. Öğrendiklerinizi uygulamak için güzel bir fırsat.
Kaynak : koddunyasi.org
ORM Nedir?
ORM, Object Relational Mapping anlamına gelmektedir. O/R Mapping olarakta yazılabilir. ORM nedir diye bir soru soracak olursak şöyle bir cevap verebiliriz: “İlişkisel veritabanı (RDBMS) ile nesneye yönelik programlanın (OO) arasında bir tür köprü özelliği gören ve ilişkisel veritabanındaki bilgilerimizi yönetmek için, nesne modellerimizi kullandığımız bir tekniktir/metodtur”. Basite indirgemek istersek: “Nesnelerimizi ilişkisel veritabanındaki tablomuza bağlayan ve veri alış-verişini bizim için yapan bir tekniktir/metodtur”. ORM tekniği belli bir programlama diline bağlı değildir ve her OO dilinde yazılabilir/kullanılabilir.Günümüzde kullanılan popüler programlama dillerinde yazılmış bir çok ORM kütüphaneleri vardır. Bunlara çoğu zaman ORM araçları (ORM Tools) deniyor. Yazımın ilerleyen bölümlerinde Java dünyasında kullanılan popüler ORM araçlarına bir göz atacağız.
ORM Kullanmanın Avantajları
- Nesneye yönelik bir programlama metodu sunuyor
- Yazılan kodun veritabanı çeşidiyle bağımlılığı yok (Oracle, SQL Server, MySQL vs)
- SQL/JDBC bilmenize/yazmanıza gerek kalmadan çok kısa bir zamanda ve de çok daha az kod ile veritabanına bağlı bir uygulama yapabilirsiniz
- ORM araçlarının çoğu Open Source (Açık kaynak kodlu – yani bedava)
- ORM araçları, programcılara bir çok kolaylık sağlıyor ve içinde barındırdığı ek desteklerle bir çok sık görülen sorunlara çözüm sunuyor. (polymorphism, caching, transaksiyon, vs)
- Sektör içinde kullanılan Java ürünlerinin çoğunda popüler ORM araçları için ekler mevcuttur (Spring, Eclipse, vs)
- Otomatik kod üretmek ve ya SQL üretmek için bir çok ürün mevcuttur
- Çok daha iyi test edilebilir kod yazmamızı sağlar
ORM Kullanmanın Dezavantajları
- Performans sorunları
- Bilgi alış-verişi sırasında kontrolün yüzde yüz sizin elinizde olmaması (Üretilen SQL bazen çok farklı olabilir)
- Kullanılan ORM aracını öğrenmek için harcanan zaman
ORM aracı seçiminde dikkat edilmesi gerekenler nelerdir?
Öncelikle şunu belirtmek gerekir ki, ORM aracı kullanmak kesinlikle mecburi bir şey değildir. Uygulamanızı JDBC ve SQL ile de yazmayı seçebilirsiniz. Fakat ORM aracı kullanmazsanız yukarıda belirtilen avantajlardan yararlanamayacaksınız ve JDBC ile programlamanın getirdiği zorlukları, kendiniz çözmek zorunda kalacaksınız. Ama yine de, ORM aracı kullanmamak ta avantajlı olabilir. Peki ne zaman kullanıp kullanmayacağımızı nasil bilebileceğiz. Altta, değişik bakış açıları ile bu soruya cevap vermeye çalıştım.- Uygulamanızın büyüklüğü
Büyük uygulamalar: Eğer uygulamanız küçük değilse, kesinlikle bir ORM aracı kullanmanızı tavsiye ediyorum. ORM araçlarının sunduğu tüm olanaklara emin olun ihtiyacınız olacaktır. Sadece, hangi ORM aracını seçmeniz gerektiğini düşünmeniz gerekecek. Bunu da, uygulamanızın gereksinimlerine ve ORM araçlarının sunduğu özelliklere bakarak yapmanız çok doğru olacaktır. Mesela uygulamanız distributed bir ortamda çalışacaksa caching/clustering desteği sağlayan bir ORM aracı seçmeniz uygun olacaktır.
- Uygulamanızın performansı
Bir başka neden ise ORM aracının yanlış kullanılmasıdır. Bunun en büyük örneklerinden biri, Lazy loading özelliğinin doğru kullanılmamasıdır. Lazy loading, bazı bilgilerin veri çekme sırasında değilde, gerektiği zaman alınmasını belirten bir seçenektir. Eğer lazy loading seçeneğini doğru kullanmazsanız, her seferinde istemediğiniz bir çok bilgiyi veritabanından çekmiş olacaksınız. Tabiki bu da performansın düşmesine sebep olacaktır.
Tabiki bazen de ORM aracı içerisinde çözülemeyen performans sorununu, JDBC kullanıp çözmekten başka seçenek kalmayabilir. Böylelikle tam istediğiniz gibi bir SQL yazabilirsiniz. Fakat ORM aracı ile JDBC aynı anda kullanıyorsanız, caching ve nesne durumlarında sorun olup olmamasına dikkat edin. Mesela ORM aracı içinde bulunan bir nesne, sizin tarafınızdan JDBC ile değiştirilmiş olabilir.
Uygulamamızın dışında, veritabanınızın doğru tasarlanmış olup olmaması da performans için çok büyük bir önem taşıyor. Örneğin, indexlerin nerelerde kullanıp kullanılmadığına bir göz atın. Veya veritabanı makineninizin özellikleride önemli olabilir. Bağlantı havuzunuzdaki özelliklere de bakabilirsiniz.
- Projenin bitmesi gereken zaman birimi
ORM’de Mapping Nedir?
Mapping, ORM’de veritabanı ile nesnelerimiz arasındaki bağı kuran yapımızdır. Hangi nesnenin (sınıfın) hangi tabloyla bağlanacağını, bağlanan tablolarda hangi property’nin (özelliğin ya da değişkenin) tablonun hangi alanıyla bağlanacağını, tablonun özelliklerini (ID’sinin ne olduğu, ID’sinin autoincrement olup olmadığı vb.) bilgilerin tanımlandığı yapımızdır. Kimi ORM frameworkleri bu işlemi yazılımcının yapmasını istese de (Hibernate, Nhibernate) kimi frameworkler bu işlemleri kendisi gerçekleştirmekte, istediği taktirde yazılımcının mapping’de düzenleme yapmasına izin vermektedir (Entity Framework).Aşağıdaki şekilde, Orm’nin yapısı daha net anlaşılmaktadır.
ORM Aracı Kullanımında Önemli Tavsiyeler
- Lazy loading özelliğini iyi bir şekilde kullanın. Örnek olarak, her zaman çekilmesi gerekmeyen verileri lazy olarak çekin.
- Caching mekanızmasını iyi anlayın ve gereksinimlere gore değiştirin.
- Çok karmaşık ORM sınıf modelleri yapmaktan kaçının.
- Şunu kabul etmek gerekir ki, ORM araçları her soruna çözüm sağlamıyor. Bu nedenle bazen normal SQL kullanmak ta olağan birşeydir.
- Veritabanınızdaki tablo şemanızı en iyi şekilde tasarlayın ki, nesne modeliniz ona göre uygun ve performanslı çalışsın. Kötü tasarlanmış bir veritabanı şeması, hangi ORM aracı seçilirse seçilsin efektif şekilde çalışmaz. Tavsiyem veritabanınızı iyi bir DBA (DataBase Administrator) tarafından kontrol ettirmeniz.
- Verileri çekerken mümkün olduğu sürece pagination (sayfalandırma) kullanmaya çalışın. Böylelikle tüm bilgileri bir anda almanıza gerek kalmamış olacak.
- Transaksiyon, concurrency batch processing ve locking mekanızmalarını, yazılımınıza en uygun şekilde configure edin.
- ORM aracı kullanırken iki tür yöntemle başlıyabilirsiniz. İlki önce veritabanı hazırlanıp ardından java sınıfları hazırlanır/üretirilir. İkincisi de önce java sınıfları hazırlanıp, ardından veritabanı tasarlanır/üretilir. Ben şahsen önce veritabanı hazırlayıp, sonra java kodlarını yazıyorum/üretiyorum. Veritabanı çok önemli olduğu için, kontrolün bende olmasını istiyorum. Java sınıflarını yazarken de, bazen otomatik kod üreten program kullanıyorum, bazen de tüm sınıfları kendim yazıyorum. Tavsiyem, polymorphism veya karmaşık modeller kullanmak istiyorsanız sınıfları kendiniz hazırlanamanızdır.
Sonuç
ORM araçları, proje geliştirmede çok büyük bir destek sağlamaktadır. Veritabanı işlemlerinin karmaşıklığını bizim için gizler ve veritabanindan bağımsız olarak nesne modelimize karşı çalışmamızı sağlar. Fakat yanlış kullanıldığında ise kabusumuz olabilir ve değişik sorunlarla karşılaşabiliriz. O yüzden de kullandığınız ORM aracının tüm inceliklerini ve püf noktalarını öğrenmek için gayret etmenizi tavsiye ederim. İnternette tüm popüler ORM araçları hakkında tonlarca dokümantasyon var ve bunun yanında da bir çok yazılımcı kendi tecrübelerini paylaşmaktadır. Bunları takip etmenizi şiddetle öneriyorum.
Kaynak : http://www.barisdere.com/
Kaynak : http://www.barisdere.com/