OOP Java 22: Stack

Stack “Data structure” (Verilənlər strukturu) olub aşağıdakı formada extent/implement münasibətində olur:

(Şəklin mənbəsi)

Stack deyərkən last-in-ferst-out (sonuncu daxil olan ilk çıxar) başa düşülməlidir. Bunu da biz aşağıdakı şəkildə rahatlıqla görə bilərik:

(Şəklin mənbəsi)

Stack-in list yaradarkən aşağıdakı formada kodlardan istifadə edə bilərsiniz:

Stack<Integer> stackInteger = new Stack<>();
Stack<String> stackString = new Stack<>();

Stack-in əsas 5 metodu vardır:

  • boolean isEmpty(); – Stack listimizin boş olub olmadığını yoxlayır.
  • void push(Object item); – Stack-imizə yeni elemet əlavə edir.
  • Object peek(); – Stack listimizin sonuncu elemetini qaytarır.
  • Object pop(); – Stack listimizin sonuncu elemetini qaytarır və onu silir.
  • int search(Object item); – hansısa bir elementin stackdə varsa index-sini (yerini) qaytarır.

Gəlin bir ədəd nümunəylə məsələni yekunlaşdıraq:

import java.util.Stack;

public class Main {
	public static void main(String[] args) {
		Stack<Integer> stack = new Stack<>();
		System.out.println("Empty: " + stack);
		System.out.println("Empty: " + stack.isEmpty());
		
		stack.push(1001);
		
		System.out.println("Empty: " + stack);
		System.out.println("Empty: " + stack.isEmpty());

		stack.push(1002); 
		stack.push(1003);
		stack.push(1001);
		
		System.out.println("Non-Empty stack : "  + stack);
        System.out.println("Non-Empty stack: Pop Operation : "  + stack.pop());
        System.out.println("Non-Empty stack : After Pop Operation : "  + stack);
        System.out.println("Non-Empty stack : search() Operation : "  + stack.search(1002));
        System.out.println("Non-Empty stack : "  + stack.isEmpty());
	}
}

Advertisements

Android 46: Intentlə obyekt ötürmək

Xatırlayırsınızsa 27-ci yazımızda inentdən söz açmış, ardınca intent vasitəsiylə məlumat ötürmüş, almışdıq. Bu səfər isə intent vasitəsiylə obyekt ötürməyə çalışacağıq.

Gəlin “IntentObject” adında bir layihə başladaq, ardınca Student adlı sinif yaradaq. Bu bizim şagird üçün formalaşdırdığımız modelimiz olacaq. Daxilində şagiridn adı, soyadı, yaşı, oxuduğu sinif olacaq. Burada yaşı integer, digərləri String formada saxlanılacaq. Hamısı “private” olaraq qorunacaq, getter və setter (inkapsulasiya) istifadə ediləcək. Bura qədər olan hissəni özünüz həll edin. İndiyə qədər çox işləmişik. Bunu belə rahatlıqla edə bilmirsinizsə, bir problem var. Dostlar. Ciddən problem var. Yalandan üzdən oxuyub keçməyin. Nəyisə siz özünüz etməyi bacarmalısınız. Normal materialı bitirdik, xırdaçılıqlara keçirik. Siz artıq harasa staj üçün müraciət etmək yaşınızdasız, böyümək vaxtıdı. Bir iki aya iş üçün müraciət edəcəyik. Bərabər open source layihələr üzərində işləyəcəyik. Məni tək qoyacaqsınız? Olmaz helə. Hadi hadi. Yuxardakı linklərə keçid et bir də bax. Özün qurmağa çalış. Qura bilmirsən, araşdır, yenidən oxu, qur. Sonra sil. Heç bir yerə baxmadan yenidən qur. Sonra gəl yazının davamını oxu. Belə də, bəyənmirsən, boşdu, bu sayta göz at burdan öyrən. Əsas odu öyrən. Lap bilirsənsə, sən də yaz, izah etməyə çalış, blogunun linkini rəy yerinə qeyd et biz də gələk oxuyaq, biz də səndən öyrənək. Hamı hər şeyi bilir – ifadəsi doğru deyil. Mən “a”-nı bilirəm, sən “c”-ni, başqa biri “a”-nı məndən yaxşı bilir, “c”-ni səndən zəif. Yazsın, mən ondan “a”-nı öyrənim, sən də yaz ki, səndən “c”-ni öyrənsin. Söhbət açılmışkən, bu yaxınlarda kodrea komandası fəaliyyətə başladı, mediumdan tutmuş youtube-a qədər. Axtarış edin, tapın, onlardan öyrənin (mən də onarın materiallarını oxuyuram).

Qayıdaq mövzumuza. Burada Student sinfimiz Serializable sinfini implements etməlidir. Etdirin.

Burda diyanıb keçirik dizayna. Burada SecondActivity adlı activity yaradın. Xml-ində bir textView olsun (id vermək yadddan çıxamasın). Activity-də textView-i tanıdın (findViewById). Ardınca MainActivity-ə keçək. Onun xml səhifəsində bunlar olacaq: 4 ədəd editText, 4 ədəd textView, 1 ədəd Button. MainActivity-də isə editText və buttonları tanıdın. Yadınızdadı buttona klikləyərkən ediləcəklər proseslərini necə yazırdıq? Bilmirsizsə linkə klikləyib baxın. Həmin prosesi yerinə yetirdikdən sonra (Tamam, tamam kömək edim, setOnclickListener, ordanda new View.OnClickListener) Student sinfimizin obyektini yaradaq, editText-lərimizdəki məlumatları bir-bir obyektimizə ötürək. (Kodların hamısı sonda sizindir, özünüz etməyə çalışın.)

İndi intent yaradırıq. Ardınca putExtra ilə obyektimizi ötürürük, startActivity(intent)- yaddan çıxmasın. Bu hissə hazır. Keçirik SeconActivity-nin içinə. İntent yaradıb getIntent() edirik. İndi gələk əsas məsələyə. Normalda informasiya ötürəndə (ibtidai tip və ya String) necə idi? Onun üçün getExtra edirdik. Lakin indi getSerializableExtra() metodunu işlədcəyik. Ad tanış gəldi? Student sinfinə hansı sinfi implement etmişdik, bir bax gör? Aha, o. Əla.

Bir ədəd Student sinfinin obyektini təyin edək, intentin metodundan aldığımız obyekti buna mənimsədək (Student-ə casting edərək). Sonrada bunu ötürək textView-ə. Tadam: Bitdi.

Xeyir, bir ədəd String qaytaran toString() – metodu yazın SecondActivity daxilinə. İçdədə mətniniz ekranda necə görünsün, onu yazın. Və artıq bitdi.

Bu yazıdan da bu qədər. Kodlara burdan baxa bilərsiniz. Uğur ola!

 

 

Android 45: REST və SOAP

Əvvəl gəlin “REST nədir?” və “SOAP nədir?” suallarına qısa cavab verək, sonra aralarındakı fərqə baxarıq.

REST nədir?

REST (REpresentational State Transfer – Nümunə Status Transferi) HTTP ilə asan və sürətli şəkildə client-server əlaqəsi qura bildiyimiz strukturdur. REST üçün URL adresləri üzərindən əlaqələr qurulur, hər bir metod url adresi üzərindən fərqli olur. REST XML və ya JSON-dan istifadə edir (məlumat ötürmək üçün). Əsas da JSON-dan istifadə edilir. Çünki çox sürətli və azhəcimli olduğu üçün. [1]

SOAP nədir?

SOAP (Simple Object Access Protocol – Sadə Obyektə Giriş Protokolu) ən sadə formada internet üzərində az miqdarda məlumatları köçürmə protokoludur. SOAP mesajları XML formatında olub əsasən HTTP (Hyper Text Transfer Protocol) protokolundan (bəzən də TCP/IP) istifadə edilərək göndərilir. Burada diqqət edilməsi vacib olan nöqtələrdən biri SOAP bizi sadəcə XML formatından istifadə etməyə məcbur edir. [2]

REST və SOAP arasındakı fərqlər:

REST SOAP-dan daha sürətli və yüngüldür. [4] REST-i öyrənmək SOAP-a nəzərən daha sürətli və rahatdır. REST kiçik informasiyalar üçün istifadə edilir, SOAP böyük məlaumatlar üçün (Bu hissə necə də GET və POST-a oxşadı). [3] REST, SOAPdan daha az bant genişliyi və resurs tələb edir. [5]

Mənbələr:

[1] https://youtu.be/FlkGlHZZLTQ
[2] http://www.erenguvercin.com/2013/05/soap-ve-rest-mimarilerine-genel-baks.html
[3] http://kodkosesi.blogspot.com/2014/01/rest-vs-soap.html
[4] http://www.ateam-oracle.com/performance-study-rest-vs-soap-for-mobile-applications/
[5] https://www.javatpoint.com/soap-vs-rest-web-services
[6] https://blog.westmonroepartners.com/mobile-web-services-jsonrest-vs-xmlsoap/
[7] https://javapapers.com/web-service/rest-vs-soap/
[8] https://www.youtube.com/watch?v=pJxYARgvn7U
[9] https://stackoverflow.com/questions/6929180/rest-and-soap-webservice-in-android
[10] https://www.captechconsulting.com/blogs/soap-vs-rest-for-mobile-services

Android 44: Android Permissions

Android Permissions – deyərkən android tədbiqetmələrində istifadəçi tərəfindən verilən müəyyən icazələr nəzərdə tutulur. Misal üçün Düzəltdiyiniz tədbiqetməyə internet əlaqəsi lazımdırsa istifadəçidən internet istifadəsi üçün icazə almalısınız. Bunlara User-Permission deyilir, yəni istifadəçi icazələri.

Bu icazələr normal və təhlükəli olmaqla iki yerə ayrılır.

İnternte istifadəsi, Bluetooth istifadəsi, Alarm, Time zone (saat qurşağı) və bu kimi icazələr normal dərəcəli icazələrdi.

Kameradan istifadə, yaddaşdan istifadə, kalendardan istifadə, sms göndərmək və ya oxumaq kimi icazələr isə təhlükəli icazələr sayılır.

Təhlükəli deyərkən “Şəxsi məlumatların qorunması” baxımından təhlükəli. Bu kateoqriyalara buradan göz ata bilərsiniz.

Yaxşı, bu icazələri hara əlavə edəcəyik bəs? Əlbətdəki AndroidManifest səhifəmizə. Aşaıdakı şəkilə baxaq (şəklin mənbəsi):

<uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Əlavə olaraq bubu yazıya göz ata, bu videonu izləyə bilərsiniz.

Android 43: ActionBar və ToolBar

Əslində yazının adına baxıb axtardığınız informasiyanı bu yazıda görməyəcəyiniz üçün üzr istəyirəm. Bu ümumiyyətlə yazı deyil.

ActionBar:

ToolBar ActionBar-ın biaz daha üstün versiyasıdır deyə bilərik. Material Design ilə (Android API 21, Android 5.0) ilə gəlib.

Bu mövzu haqqında geniş mənbələr var, əvvəl türkc sonra ingiliscə olmaqla linklər aşağıda:

[1] https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-201/action-bar-eklemek
[2] http://www.androidevreni.com/material-design-toolbar-kullanimi/
[3] https://canaltinova.com/blog/gule-gule-action-bar-hosgeldin-toolbar/
[4] https://blog.xamarin.com/android-tips-hello-toolbar-goodbye-action-bar/
[5] https://www.appcelerator.com/blog/2013/09/using-androids-actionbar/

[6] https://youtu.be/kmUGLURRPkI

Android 42: GET və POST

Bu yazımızdan etibarən, bir neçə yazı sırf bir-birinə oxşar 2 şeyin fərqləri üzərində olacaq. Bu yazımızda GET və POST əmirlərinin fərqinə baxacağıq.

Arasında fərqə baxmadan əvvəl deyək ki, GET və POST əmirləri SQL üçün olan əmirlərdir. Hər ikisi HTTP “request” metodlarıdır.

GET

  • Əlfəcin istifadə etmək mümkündür (Seçilmişlərə əlavə etmək)
  • Keş yaddaşda saxlanıla bilər
  • Browser tarixində qalır.
  • Həsass (çox vacib) məlumatlar üçün istifadə edilməməlidir.
  • 255 simvolluq bir uzunluq məhdudiyyəti var və ASCII cədvəlinə uyğun olmalıdır.
  • Sadəcə məluamt almaq üçün istifadə edilir

POST

  • Seçilmişlərə əlavə edilmir
  • Browser tarixində qalmır
  • Vacib məlumatlar üçün istifadə edilə bilər
  • 32000 simvola qədər uzadıla bilər, ASCII cədvəlinə uyğun olmasa da olar, yəni 0-1 kimi binary formada da ola bilər

Bir qədər qısa oldu amma aşağıdakı mənbələrər göz ataraq bu mövzu haqqında daha dərinləməsinə informasiya əldə edə bilərsiniz (edin)

[1] http://www.bahadirakin.com/get-ve-post-metodlari-ve-java/
[2] http://www.includekarabuk.com/kategoriler/genel/GET-ile-POST-Arasindaki-Fark.php
[3] https://www.w3schools.com/tags/ref_httpmethods.asp
[4] https://www.diffen.com/difference/GET-vs-POST-HTTP-Requests
[5] https://stackoverflow.com/questions/3477333/what-is-the-difference-between-post-and-get

SQL 11: Java SQL əlaqə (Oracle 11g)

Bu yazımızda artıq Oracle 11g ilə Java kodlarımız üzərindən əlaqə quracağıq. Təkrar qeyd edim ki, biz Oracle 11g-dən istifadə edirik, əgər siz MySQL-dən istifadə edirsinizsə bu youtube video listinə göz atın.

Javada yazılmış fayllar .jar formatlı kitabxana formasında saxlanılır. Biz öz layihəmizə başqa kitabxanaları internetdən yükləyib əlavə edə bilərik.

Bu yazımızda Java üzərindən Oracle ilə əlaqə quracağıq. Bunun iki yolu var:

  1. Driver Menecer
  2. ConnectionPool

(Adlarını səhv yazmış ola bilərəm.) Biz ilk yoldan istifadə edəcəyik. Bunun üçün biz o JDBC jar-ını yükləməliyik. Bu linkə keçid edib yükləyin.

Layihəmizin üstünə sağ kikləyib New => Folder seçirik

Folderimizin adını “lib” qoyaq:

Yüklədiyimiz faylı (o JDBC6) kopyalayıb lib qovluğuna yapışdıraq:

Layihəmizin bu kitabxanadan istifadə edə bilməsi üçün əvvəlcə bunu tanıtmaq lazımdır. Bunun üçün də layihənin üzərinə sağ kilikləyirik: Properties => Java Build Path => Add Library => User Library => Next

User Libraray = > New seçək, Kitabxalarımız üçün olan qovuğumuza ad qoyaq, (mən “Kiatbxana” qoyacam)

Sonra Add JARs.. seçib ordan öz lazimi kitabxanalarımızı seçirik.

Applay And close, Finish, Applay and Close. Hazırdır:

Bundan sonra artıq biz Oracle ilə əlaqə qura bilərik. Bunun üçün DriverManager sinfinin getConnection static metodunu çağıracağıq. Həmi metod 3 arqument alır. Url, User və Password. Onları müvafiq olaraq dolduracam və try/catch edəcəm.

Bu əlaqə bizə “Connection” qaytaracağı üçün “c” adlı bir Connection dəyişəni təyin edib həmin kodu ona mənimsədirik. Ardınca oracle-ın driver-ini tapmaq lazımdı. Bunun üçün Class.forName metoduna OracleDriver adresini ötürürük.

Qeyd: “thin@” arasında qoşa nöqtə olmalı idi, “thin:@”

Bu yazıdan da bu qədər. Növbəti dəfə qurduğumuz əlaqə vasitəsiylə məlumatları konsola çapa verəcəyik. Ondan sonra isə yəqin ki, yenə bir müddət fasilə verərik. Zaman göstərəcək. Hələlik!