کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش Java-آموزش Packages در جاوا


 

پوشه ها (packages) در جاوا برای جلوگیری از مشکلات نامگذاری (naming conflicts)، کنترل دستیابی، ساخت searchin/location و استفاده از گروه ها، اینترفیس ها، شمارش ها، حاشیه نویسی ها و غیره استفاده می شود.

یک پوشه می تواند به عنوان یک گروه بندی از انواع مرتبط ( گروه ها، اینترفیس ها، شمارش ها و حاشیه نویسی ها)محافظت access و مدیریت فضانام ارائه دهد.

برخی پوشه های موجود در جاوا عبارتند از:

·          java.lang - گروه های اصلی را به یکدیگر متصل می کند.

·          - گروه هایی برای عملکردهای ورودی، خروجی در این پوشه به یکدیگر متصل هستند.

برنامه نویسان برای اتصال گروه ها / اینترفیس ها و غیره می توانند پوشه های خود را تعریف کنند. گروه بندی کلاس های مرتبط که توسط شما اجرا می شوند، تمرین خوبی است، طوریکه یک برنامه نویس می تواند به سادگی می تواند تعیین کند که کلاس ها، اینترفیس ها، شمارش ها و حاشیه نویس ها با یکدیگر مرتبط هستند.

از آنجایی که یک پوشه یک namespace جدید ایجاد می کند، هیچگونه مشکل نام گذاری با نام های دیگر پوشه ها وجود ندارد. با استفاده از پوشه ها، ارائه ی کنترل دسترسی و همچنین موقعیت یابی گروه های مرتبط آسانتر می شود.

ایجاد یک پوشه (package):

در هنگام ایجاد یک پوشه، باید برای پوشه یک نام انتخاب کنید و یک عبارت package با آن نام در بالای هر فایل منبع قرار دهید که حاوی گروه ها، اینترفیس ها، شمارش ها و انواع حاشیه نویسی ها می شود که تمایل دارید در پوشه ی خود وارد کنید.

عبارت package در فایل منبع باید اولین خط باشد. تنها یک عبارت package در هر فایل منبع می تواند وجود داشته باشد و برای تمام انواع در فایل استفاده می شود.

اگر یک عبارت package در گروه ها، اینترفیس ها، شمارش ها و حاشیه نویسی ها استفاده نشود، انواع در یک پوشه ی بدون نام قرار خواهند گرفت.

مثال:

اجازه بدهید مثالی را مورد بررسی قرار دهیم که پوشه ای به نام animals ایجاد می کند. برای جلوگیری از به وجود آمدن هر گونه مشکلی با نام های گروه ها و اینترفیس ها، استفاده از نام پوشه ها با حروف کوچک متداول می باشد.

یک اینترفیس در پوشه ی animals  قرار دهید:

/* File name : Animal.java */

package animals;

 

interface Animal {

   public void eat();

   public void travel();

}

 

اکنون همان پوشه ی animals را اجرا کنید:

package animals;

 

/* File name : MammalInt.java */

public class MammalInt implements Animal{

 

   public void eat(){

      System.out.println("Mammal eats");

   }

 

   public void travel(){

      System.out.println("Mammal travels");

   }

 

   public int noOfLegs(){

      return 0;

   }

 

   public static void main(String args[]){

      MammalInt m = new MammalInt();

      m.eat();

      m.travel();

   }

}

 

حالا می توانید این دو فایل را کامپایل کرده و آنها را در یک مسیر فرعی به نام animals  قرار دهید و مانند زیر سعی کنید آن را اجرا کنید:

$ mkdir animals

$ cp Animal.class  MammalInt.class animals

$ java animals/MammalInt

Mammal eats

Mammal travels

 

لغت کلیدی import:

اگر یک گروه می خواهد از گروه دیگری در همان پوشه استفاده کند، نام پوشه لازم نیست استفاده شود. گروه ها در همان پوشه یکدیگر را بدون هیچ ترکیب خاصی پیدا می کنند.

مثال:

در اینجا گروهی به نام Boss به پوشه ی payroll اضافه شده که تقریبا حاوی Employee می باشد. Boss بدون استفاده از پیشوند payroll می تواند به گروه Employee اشاره کند، که به وسیله ی گروه Boss زیر توضیح داده می شود:

package payroll;

 

public class Boss

{

   public void payEmployee(Employee e)

   {

      e.mailCheck();

   }

}

 

چه اتفاقی می افتد اگر Boss در پوشه ی payroll نباشد؟ گروه Boss باید از یکی از تکنیک های زیر برای اشاره به یک گروه در یک پوشه ی متفاوت استفاده کند.

·         نام کامل گروه می تواند استفاده شود، برایمثال:

payroll.Employee

·         پوشه با استفاده از لغت کلیدی  import  و علامت (*)  می تواند وارد شود. برای مثال:

import payroll.*;

·         خود گروه نیز می تواند با استفاده از لغت کلیدی import وارد شود. برای مثال:

 

import payroll.Employee;

 

نکته: یک گروه می تواند حاوی هر تعداد عبارت import باشد. عبارات مهم باید پس ازعبارت package و قبل از اعلام گروه ظاهر شوند.

ساختار دایرکتوری یک پوشه:

وقتی یک گروه در یک پوشه قرار می گیرد، دو نتیجه ی مهم به دنبال دارد:

·         همانطور که در بخش قبل صحبت کردیم، نام پوشه بخشی از نام گروه می شود.

·         نام پوشه باید با ساختار دایرکتوری، که byte code متناظر در آن می باشد، هماهنگ باشد.

در اینجا روشساده ی مدیریت فایل های خود را در جاوا مشاهده می کنید:

Source code را برای یک گروه، اینترفیس، annotation یا enumeration در یک فایل تکست قرار دهید که نام آن نام ساده ی نوع می باشد و گستره ی آن نیز جاوا است. برای مثال:

// File Name :  Car.java

 

package vehicle;

 

public class Car {

   // Class implementation.  

}

 

اکنون فایل منبع را در مسیری قرار دهید که نام آن نام پوشه ای را منعکس می کند که متعلق به گروه میباشد:

....\vehicle\Car.java

اکنون نام مناسب گروه و نام مسیر مانند زیر می باشد:

·         نام گروه -> vehicle.Car

·         نام مسیر ->  vehicle\Car.java  (در ویندوز)

به طور کل یک شرکت از نام معکوس اینترنتی خود برای نام های پوشه ی خود استفاده می کند. مثال: نام اینترنتی یک شرکت apple.com  می باشد، پس نام تمام پوشه های آن با com.apple  شروع خواهد شد. هر مولفه ی مربوط به نام پوشه با یک دایرکتوری فرعی مطابقت دارد.

مثال: شرکت دارای پوشه ی com.apple.computers  می باشد که حاوی یک فایل منبع Dell.java  است، این شرکت دارای مجموعه ای از دایرکتوری های فرعی مانند زیر می باشد:

....\com\apple\computers\Dell.java

در زمان انجام کامپایل، کامپایلر یک فایل خروجی متفاوت برای هر گروه، اینترفیس و enumeration تعریف شده در آن، ایجاد می کند. نام اصلی فایل خروجی نام نوع و گستره ی آن .class  می باشد.

برای مثال:

// File Name: Dell.java

 

package com.apple.computers;

public class Dell{

     

}

class Ups{

     

}

 

اکنون با استفاده از گزینه ی –d ، این فایل را مانند زیر کامپایل کنید:

$javac -d . Dell.java

این برنامه فایل های کامپایل شده را مانند زیر قرار می دهد:

.\com\apple\computers\Dell.class

.\com\apple\computers\Ups.class

 

شما می توانید همه ی گروه ها و اینترفیس های تعریف شده در \com\apple\computers\   را مانند زیر تعریف کنید:

import com.apple.computers.*;

 

مانند فایل های منبع java، فایل های کامپایل شده ی .class  باید در مجموعه ای از دارکتوری ها باشند که نام پوشه را منعکس می کنند. به هرحال مسیر به سمت فایل های  .class لازم نیست مشابه مسیر به سمت فایل های منبع java باشد. شما می توانید دایرکتوری های گروه و منبع خود را به طور مجزا تنظیم کنید، مانند زیر:

\sources\com\apple\computers\Dell.java

\classes\com\apple\computers\Dell.class

 

 

به این وسیله می توانید بدون آشکار کردن منابع خود به گروه ها مسیری به دیگر برنامه نویسان دیگر بدهید. همچنین لازم است فایل های منبع و گروه را به این روش سازماندهی کنید، طوریکه کامپایلر و Java Virtual Machine (JVM)  میتوانند انواع مورد استفاده برنامه ی شما را پیدا کنند.

مسیر کامل برای دایرکتوری گروه ها، \classes ، مسیر گروه نامیده می شود و با متغیر CLASSPATH  تنظیم می شود. هم کامپایلر و هم JVM مسیر را با اضافه کردن نام پوشه به مسیر گروه به فایل های .class ، می سازند.

اگر مسیر گروه را \classes و نام پوشه را com.apple.computers  بنامید، سپس کامپایلر و JVM در \classes\com\apple\compters  به دنبال فایل های .class  خواهند بود.

مسیر یک گروه ممکن است حاوی چندید مسیر باشد. مسیرهای متعدد باید به وسیله ی نقطه ویرگول و یا ویرگول از یکدیگر مجزا شوند. به طور پیش فرض کامپایلر و JVM مسیر جاری را جستجو می کنند و فایل JAR حاوی گروه های Java platform  می باشد، طوریکه این گروه ها به طور خودکار در مسیر گروه هستند.

تنظیم متغیر CLASSPATH:

برای نمایش متغیر جاری CLASSPATH ، ازفرمان های زیر در ویندوز و UNIX استفاده کنید:

·         در ویندوز:  C:\> set CLASSPATH

·         در UNIX:  % echo $CLASSPATH

برای حذف محتوای فعلی از متغیر CLASSPATH  می توانید از موارد زیر استفاده کنید:

·         در ویندوز:   C:\> set CLASSPATH=

·         در UNIX: % unset CLASSPATH; export CLASSPATH

برای تنظیم متغیر  CLASSPATH  نیز:

·         در ویندوز: set CLASSPATH=C:\users\jack\java\classes

·         در UNIX: % CLASSPATH=/home/jack/java/classes; export CLASSPATH

 

 

1394/07/27 4244 0
نظرات شما

نظرات خود را ثبت کنید...