KodeGym/Blog Jawa/Acak/Akses Modifiers ing Jawa
John Squirrels
tingkat
San Francisco

Akses Modifiers ing Jawa

Diterbitake ing grup
Hi! Ing pawulangan dina iki, kita bakal kenal karo konsep modifikasi akses lan nimbang conto cara nggarap. Mesthine, ujar 'kenalan' ora bener: sampeyan wis ngerti umume saka pelajaran sadurunge. Mung ing kasus, ayo refresh memori kita bab sing paling penting. Akses modifiers paling asring tembung kunci sing ngatur akses menyang macem-macem bagean kode sampeyan. Kenapa 'paling sering'? Amarga salah siji saka wong-wong mau wis disetel minangka standar tanpa nggunakake tembung kunci :) Jawa wis papat akses modifiers. Kita dhaptar kanthi urutan saka sing paling mbatesi nganti paling 'lembut':
  • pribadi;
  • standar (paket katon);
  • dilindhungi;
  • umum.
Ayo goleki saben wong lan ngerteni kapan bisa migunani. Lan kita bakal menehi conto :)

Modifier pribadi

Akses modifiers.  Pribadi, dilindhungi, standar, umum - 2pribadi minangka modifier akses sing paling mbatesi. Iki mbatesi visibilitas data lan metode ing kelas siji. Sampeyan ngerti modifier iki saka pawulangan babagan getter lan setter. Elinga conto iki?
public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }
}

public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();
       cat.name = "";
       cat.age = -1000;
       cat.weight = 0;
   }
}
Kita nimbang ing pawulangan sadurunge. Kita nggawe kesalahan serius ing kene: Kita nggawe data umum, sing ngidini kanca-kanca programer bisa ngakses lapangan kanthi langsung lan ngganti nilai-nilai kasebut. Apa maneh... nilai-nilai kasebut diwenehi tanpa mriksa. Iki tegese program kita bisa nggawe kucing jenenge "" kanthi umur -1000 taun lan bobot 0. Kanggo ngatasi masalah iki, kita nggunakake getter lan setter, lan uga nggunakake modifier pribadi kanggo matesi akses menyang data.
public class Cat {

   private String name;
   private int age;
   private int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       // input parameter check
       this.name = name;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       // input parameter check
       this.age = age;
   }

   public int getWeight() {
       return weight;
   }

   public void setWeight(int weight) {
       // input parameter check
       this.weight = weight;
   }
}
Sejatine, matesi akses menyang lapangan lan ngleksanakake getter lan setter minangka conto sing paling umum babagan carane pribadibakal digunakake ing karya nyata. Ing tembung liyane, tujuan utama modifier iki kanggo entuk enkapsulasi ing program. Iki ora mung ditrapake kanggo lapangan, kanthi cara. Mbayangno yen ing program sampeyan duwe metode sing ngetrapake sawetara fungsi sing rumit banget. Apa sing bisa kita saranake minangka conto? Ayo dadi ngomong cara readDataFromCollider () sampeyan nampa minangka input alamat data, maca data saka Gedhe Hadron Collider ing format bait, Ngonversi data iki menyang teks, nulis menyang file, lan prints. Malah gambaran saka cara katon medeni, kanggo ngomong apa-apa saka kode :) Kanggo nggawe kode luwih bisa diwaca, iku bakal paling apik kanggo ora nulis kabeh logika Komplek cara ing sak panggonan. Nanging, kita kudu misahake fungsi kasebut dadi cara sing kapisah. Contone, readByteData()cara tanggung jawab kanggo data maca, convertBytesToSymbols () cara Ngonversi data diwaca saka collider menyang teks, saveToFile () cara nyimpen teks ditampa menyang file, lan printColliderData () cara prints file data kita. Ing pungkasan, metode readDataFromCollider() kita bakal luwih gampang:
public class ColliderUtil {

   public void readDataFromCollider(Path pathToData) {
       byte[] colliderData = readByteData(pathToData);
       String[] textData = convertBytesToSymbols(colliderData);
       File fileWithData = saveToFile(textData);
       printColliderData(fileWithData);
   }

   public byte[] readByteData(Path pathToData) {

       // Reads data in bytes
   }

   public String[] convertBytesToSymbols(byte[] colliderDataInBytes) {

       // Converts bytes to characters
   }

   public File saveToFile(String[] colliderData) {

       // Saves read data to a file
   }

   public void printColliderData(File fileWithColliderData) {

       // Prints data from the file
   }
}
Nanging, sampeyan bakal ngelingi saka pelajaran babagan antarmuka, pangguna mung entuk akses menyang antarmuka eksternal. Lan 4 cara kita dudu bagean kasebut. Iku cara helper: kita digawe kanggo nambah readability saka kode lan ora cram papat tugas beda dadi siji cara. Sampeyan ora perlu menehi akses pangguna menyang metode kasebut. Yen pangguna duwe akses kanggo convertBytesToSymbols () cara nalika nggarap collider, padha bakal paling kamungkinan mung bakal bingung dening cara lan wonder apa iku. Apa bita sing diowahi? Saka ngendi asale? Napa ngowahi dadi teks? Logika sing dileksanakake ing metode iki dudu bagean saka antarmuka sing katon kanggo pangguna. Mung readDataFromCollider()metode minangka bagéan saka antarmuka. Dadi, apa sing kudu ditindakake kanthi papat metode 'internal' iki? Bener! Gunakake modifier pribadi kanggo matesi akses menyang. Kanthi nindakake iki, dheweke bisa nindakake pakaryan kanthi tentrem ing kelas tanpa mbingungake pangguna, sing ora perlu ngerti logika saben metode.
public class ColliderUtil {

   public void readDataFromCollider(Path pathToData) {
       byte[] colliderData = readByteData(pathToData);
       String[] textData = convertBytesToSymbols(colliderData);
       File fileWithData = saveToFile(textData);
       printColliderData(fileWithData);
   }

   private byte[] readByteData(Path pathToData) {
       // Reads data in bytes
   }

   private String[] convertBytesToSymbols(byte[] colliderDataInBytes) {
       // Converts bytes to characters
   }

   private File saveToFile(String[] colliderData) {
       // Saves read data to a file
   }

   private void printColliderData(File fileWithColliderData) {
       // Prints data from the file
   }
}

Modifier sing dilindhungi

Modifier paling mbatesi sabanjure dilindhungi . Akses modifiers.  Pribadi, dilindhungi, standar, umum - 3Kolom lan metode sing ditandhani dening modifier akses sing dilindhungi bakal katon:
  • ing kabeh kelas sing kalebu ing paket sing padha karo kita;
  • ing kabeh kelas sing marisi kelas kita.
Kaping pisanan, angel mbayangno kapan iki dibutuhake. Aja kaget: kasus panggunaan sing dilindhungi luwih sithik tinimbang kanggo pribadi , lan spesifik banget. Mbayangno yen kita duwe kelas abstrak AbstractSecretAgent sing makili agen rahasia ing sawetara layanan intelijen, uga paket top_secret sing ngemot kelas iki lan turunane. Kelas beton kayata FBISecretAgent , MI6SecretAgent , MossadSecretAgent , lan liya-liyane. Ing kelas abstrak, kita pengin ngleksanakake counter agen. Iku bakal nambah nalika agen anyar digawe nang endi wae ing program. paket top_secret;
public abstract class AbstractSecretAgent {

   public static int agentCount = 0;
}
Nanging agen kita rahasia! Iki tegese dheweke lan ora ana wong liya sing kudu ngerti jumlahe. Kita bisa kanthi gampang nambah modifier sing dilindhungi menyang kolom agent_counter . Banjur conto kelas agen rahasia liyane lan kelas liyane sing ana ing paket top_secret bisa entuk regane.
public abstract class AbstractSecretAgent {

   protected static int agent_counter = 0;
}
Lan iki jenis tugas khusus sing mbutuhake modifier sing dilindhungi :)

Paket sing katon modifier

Sabanjure ing dhaptar yaiku modifier standar , uga dikenal minangka modifier katon paket . Iki ora dituduhake dening tembung kunci, amarga Jawa ditrapake minangka standar kanggo kabeh kolom lan metode. Yen sampeyan nulis ing ngisor iki ing kode sampeyan:
int x = 10
variabel x bakal duwe akses katon paket iki . Iku gampang kanggo ngelingi apa iku. Sejatine, standar = warisan sing dilindhungi :) Kaya modifier sing dilindhungi , aplikasi kasebut diwatesi. Paling asring, akses standar digunakake ing paket sing nduweni sawetara kelas sarana sing ora ngetrapake fungsi kabeh kelas liyane ing paket kasebut. Ayo menehi conto. Mbayangno yen kita duwe paket 'layanan'. Isine macem-macem kelas sing bisa digunakake karo database. Contone, ana kelas UserService sing maca data pangguna saka database, CarServicekelas sing maca data mobil saka database padha, lan kelas liyane, saben kang dianggo karo jinis tartamtu saka obyek lan maca data sing cocog saka database.
package services;

public class UserService {
}

package services;

public class CarService {
}
Nanging bakal gampang kanggo data ing database ing siji format lan kita kudu ing liyane. Bayangake manawa tanggal lahir pangguna ing database disimpen minangka <TIMESTAMP WITH TIME ZONE>...
2014-04-04 20:32:59.390583+02
...lan tinimbang kita butuh obyek sing paling gampang - a java.util.Date . Kanggo ngatasi masalah iki, ing paket layanan , kita bisa nggawe kelas Mapper khusus . Bakal tanggung jawab kanggo ngowahi data saka database menyang obyek Jawa sing akrab. Kelas pembantu sing prasaja. Kita biasane nyatakake kabeh kelas minangka kelas umum ClassName , nanging iki dudu syarat. Kita bisa ngumumake kelas helper mung minangka kelas Mapper . Ing kasus iki, isih nindakake tugase, nanging ora katon kanggo sapa wae ing njaba paket layanan !
package services;

class Mapper {
}


package services;

public class CarService {

   Mapper mapper;
}
Lan iki alasan dhasar: kenapa sapa wae ing njaba paket kudu ndeleng kelas pembantu sing mung bisa digunakake karo kelas ing paket kasebut?

Modifier umum

Lan pungkasan, nanging paling ora, modifier umum ! Sampeyan ketemu modifier iki ing dina pisanan sinau ing CodeGym nalika pisanan mbukak public static void main(String[] args) . Akses modifiers.  Pribadi, dilindhungi, standar, umum - 4Saiki sampeyan wis sinau babagan antarmuka, tujuane wis jelas kanggo sampeyan :) Sawise kabeh, modifier umum digawe kanggo menehi sesuatu kanggo pangguna. Contone, antarmuka program sampeyan. Upamane sampeyan wis nulis program penerjemah sing bisa nerjemahake teks Rusia menyang Inggris. Sampeyan nggawe metode terjemahan (String textInRussian) sing ngetrapake kabeh logika sing dibutuhake. Sampeyan menehi tandha cara iki nganggo tembung public , lan saiki dadi bagian saka antarmuka:
public class Translator {

   public String translate(String textInRussian) {

       // Translates text from Russian to English
   }
}
Sampeyan bisa ngubungake cara iki menyang tombol 'Terjemahake' ing layar lan sampeyan wis rampung! Sapa wae bisa nggunakake. Bagean kode sing ditandhani karo modifier umum kanggo pangguna pungkasan. Nyedhiyakake conto nyata, pribadi kanggo kabeh proses sing kedadeyan ing TV, nanging umum kanggo tombol ing remot kontrol sing digunakake kanggo ngatur TV. Apa maneh, pangguna ora perlu ngerti carane televisi dibangun utawa cara kerjane. Remot kontrol pesawat saka umum -metode: on () , mati () , nextChannel () , previousChannel () , increaseVolume () , ngurangiVolume () etc. Kanggo nguatake apa sing sampeyan sinau, disaranake sampeyan nonton video pelajaran saka Kursus Jawa
Komentar
  • Popular
  • Anyar
  • lawas
Sampeyan kudu mlebu kanggo ninggalake komentar
Kaca iki durung duwe komentar