Java - パッケージ


■ページ目次

Top

■パッケージ

Top
■パッケージの指定
■パッケージのコンパイル
■商品管理システムのパッケージ化
Top
■ユーザー・クラス・パス
Top
■無名パッケージ
Top
■import文
Top

■ソース・ファイルとクラス・ファイルの管理

■商品管理システムのソース・ファイルとクラス・ファイルの管理
    "AbstractProduct.java"
    1. // 1201
    2. package product;
    3. // 抽象商品クラスです。
    4. // 商品を扱うクラスが持っていなければならないメソッドを提供しています。
    5. public abstract class AbstractProduct {
    6. private String code; // 商品コード
    7. private String name; // 商品名
    8. // 商品コードに値を設定します。
    9. public void setCode(String code) {
    10. this.code = code;
    11. }
    12. // 商品コードの値を取得します。
    13. public String getCode() {
    14. return this.code;
    15. }
    16. // 商品名に値を設定します。
    17. public void setName(String name) {
    18. this.name = name;
    19. }
    20. // 商品名の値を取得します。
    21. public String getName() {
    22. return this.name;
    23. }
    24. // 商品定価の値を取得します。
    25. public abstract int getPrice() ;
    26. }
    "Product.java"
    1. // 1201
    2. // 商品クラスです。
    3. // ひとつの商品に対するフィールドやフィールドを操作するためのメソッドを
    4. // 提供しています。
    5. package product;
    6. public class Product extends AbstractProduct {
    7. private int price; // 商品定価
    8. // 商品クラスのコンストラクター。
    9. public Product(String code, String name, int price) {
    10. setCode(code);
    11. setName(name);
    12. setPrice(price);
    13. }
    14. // 商品クラスのコンストラクター。
    15. public Product(String code, String name, String price) {
    16. setCode(code);
    17. setName(name);
    18. setPrice(price);
    19. }
    20. // 商品定価に値を設定します。
    21. public void setPrice(int price) {
    22. if (price < 0) {
    23. this.price = 0;
    24. return;
    25. }
    26. this.price = price;
    27. }
    28. // 商品定価に値を設定します。
    29. public void setPrice(String price) {
    30. setPrice(Integer.parseInt(price));
    31. }
    32. // 商品定価の値を取得します。
    33. public int getPrice() {
    34. return this.price;
    35. }
    36. }
    "DiscountInterface.java"
    1. // 1201
    2. package product;
    3. // 割引インターフェースです。
    4. // 割引される商品情報が持っていなければならないメソッドの実装を強制しています。
    5. interface DiscountInterface {
    6. // 商品割引率の値を設定します。
    7. void setDiscount(int discount);
    8. // 商品割引率の値を取得します。
    9. int getDiscount();
    10. }
    "DiscountProduct.java"
    1. // 1201
    2. package product;
    3. // 割引商品クラスです。
    4. // ひとつの商品に対するフィールドやフィールドを操作するためのメソッドを
    5. // 提供しています。
    6. public class DiscountProduct extends Product implements DiscountInterface {
    7. private int discount; // 商品割引率
    8. // 割引商品クラスのコンストラクター。
    9. public DiscountProduct(String code, String name, int price) {
    10. this(code, name, price, 0);
    11. }
    12. // 割引商品クラスのコンストラクター。
    13. public DiscountProduct(String code, String name, String price) {
    14. this(code, name, price, "0");
    15. }
    16. // 割引商品クラスのコンストラクター。
    17. public DiscountProduct(String code, String name, int price, int discount) {
    18. super(code, name, price);
    19. setDiscount(discount);
    20. }
    21. // 割引商品クラスのコンストラクター。
    22. public DiscountProduct(String code, String name, String price, String discount) {
    23. super(code, name, price);
    24. setDiscount(discount);
    25. }
    26. // 商品割引率に値を設定します。
    27. public void setDiscount(int discount) {
    28. if (discount < 0 || discount > 100) {
    29. this.discount = 0;
    30. return;
    31. }
    32. this.discount = discount;
    33. }
    34. // 商品割引率に値を設定します。
    35. public void setDiscount(String discount) {
    36. setDiscount(Integer.parseInt(discount));
    37. }
    38. // 商品割引率の値を取得します。
    39. public int getDiscount() {
    40. return this.discount;
    41. }
    42. // 商品の売値の値を取得します。
    43. public int getPrice() {
    44. return (int)(super.getPrice() * (1 - discount / 100.0));
    45. }
    46. }
    "SetProduct.java"
    1. // 1201
    2. package product;
    3. // セット商品クラスです。
    4. // ひとつまたは複数の商品を集めて、割引したものをセット商品として扱います。
    5. // セット商品に対するフィールドやフィールドを操作するためのメソッドを
    6. // 提供しています。
    7. public class SetProduct extends AbstractProduct implements DiscountInterface {
    8. private int discount; // セット商品割引率
    9. private AbstractProduct[] products; // セット商品リスト
    10. // セット商品クラスのコンストラクター。
    11. public SetProduct(String code, String name, int discount, AbstractProduct[] products) {
    12. setCode(code);
    13. setName(name);
    14. setDiscount(discount);
    15. setProducts(products);
    16. }
    17. // 商品の売値の値を取得します。
    18. public int getPrice() {
    19. int price = 0;
    20. for (int i = 0; i < products.length; i++) {
    21. price += products[i].getPrice();
    22. }
    23. return (int)(price * (1 - discount / 100.0));
    24. }
    25. // 商品割引率に値を設定します。
    26. public void setDiscount(int discount) {
    27. if (discount < 10 || discount > 100) {
    28. this.discount = 0;
    29. return;
    30. }
    31. this.discount = discount;
    32. }
    33. // 商品割引率に値を設定します。
    34. public void setDiscount(String discount) {
    35. setDiscount(Integer.parseInt(discount));
    36. }
    37. // 商品割引率の値を取得します。
    38. public int getDiscount() {
    39. return discount;
    40. }
    41. // 商品割引率に値を設定します。
    42. public void setProducts(AbstractProduct[] products) {
    43. this.products = products;
    44. }
    45. }
    "TestProduct.java"
    1. // 1201
    2. package application;
    3. import product.*;
    4. // 商品クラスをテストするクラスです。
    5. public class TestProduct {
    6. public static void main(String[] args) {
    7. AbstractProduct[] p = new AbstractProduct[4];
    8. p[0] = new DiscountProduct("A001", "パソコン", 188000, 20);
    9. p[1] = new Product("P001", "プリンター", 24000);
    10. p[2] = new DiscountProduct("C001", "CD-ROM", 6500, 10);
    11. p[3] = new Product("M001", "USBメモリー", 9800);
    12. System.out.println("商品配列のインスタンスを生成しました。 p = " + p);
    13. for (int i = 0; i < p.length; i++) {
    14. System.out.println("商品のインスタンスを生成しました。 p[" + i + "] = " + p[i]);
    15. System.out.println(" code = " + p[i].getCode());
    16. System.out.println(" name = " + p[i].getName());
    17. System.out.println(" price = " + p[i].getPrice());
    18. }
    19. SetProduct s = new SetProduct("SA01", "パソコン・セット", 10, p);
    20. System.out.println("セット商品のインスタンスを生成しました。 s = " + s);
    21. System.out.println(" code = " + s.getCode());
    22. System.out.println(" name = " + s.getName());
    23. System.out.println(" price = " + s.getPrice());
    24. }
    25. }
    $ javac -d classes sources/product/*.java  <- 商品
    
    $ javac -d classes -classpath classes sources/application/*.java  <- アプリケーション
    
    $ java -cp classes application.TestProduct  <- 実行
    商品配列のインスタンスを生成しました。 p = [Lproduct.ProductInterface;@1004901
    商品のインスタンスを生成しました。 p[0] = product.DiscountProduct@1b90b39
       code = A001
       name = パソコン
      price = 150400
    商品のインスタンスを生成しました。 p[1] = product.Product@18fe7c3
       code = P001
       name = プリンター
      price = 24000
    商品のインスタンスを生成しました。 p[2] = product.DiscountProduct@b8df17
       code = C001
       name = CD-ROM
      price = 5850
    商品のインスタンスを生成しました。 p[3] = product.Product@13e8d89
       code = M001
       name = USBメモリー
      price = 9800
    セット商品のインスタンスを生成しました。 s = product.SetProduct@cf2c80
       code = SA01
       name = パソコン・セット
      price = 171045
    
    
Top
■実習
  1. ディレクトリー"~/basic/"の下にディレクトリー"maruno/classes"と"maruno/sources"を作成してください。
    $ mkdir -p maruno/classes maruno/sources
    
  2. ディレクトリー"maruno/sources"にソースファイルを作ります。
    テキストの"Pack01.java"をコンパイルしてください。
    1. package com.maruno.mypack;
    2. public class Pack01 {
    3. public void printData() {
    4. System.out.println( "Pack01" );
    5. }
    6. }

    □ コンパイル

    $ javac -d ../classes Pack01.java
    
  3. テキストの"Pack02.java"をコンパイルして実行ください。
    1. import com.maruno.mypack.Pack01;
    2. public class Pack02 {
    3. public static void main( String[] args ) {
    4. Pack01 pack01;
    5. pack01 = new Pack01();
    6. pack01.printData();
    7. }
    8. }

    □ コンパイル

    $ javac -classpath ../classes Pack02.java
    

    □ 実行結果

    $java -cp .:../classes com.maruno.mypack.Pack02
    Pack01
    
Top

■Java ARchive(JAR)

Top

inserted by FC2 system