javaの相対組成(実施スタック)
-
07-07-2019 - |
質問
うことにより実施するスタックにjavaを使用してリストインターフェース: インタフェースリスト).
したいプロジェクトを実施する二つの異なる方法:用組成と継承関係を示します。
のための相続していきたいと思い:
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class StackInheritance implements List {
//implement list methods
}
のための組成してい:
import java.util.List;
public abstract class StackComposition implements List {
// implement some standard methods
}
public class StackViaList extends StackComposition {
// implement methods that have not been implemented in the abstract
// class
}
私混同してはこちらから。私は利用したことのないインターフェースの前にいかに利用、リストの方法"mimic"スタックを用いて、配列またはArrayList。
また、組成物かわからない方法は、どのようなオーディオ愛好家のStackComposition、何をすべきくStackViaList.とは十分に理解しインターフェースとして継承と組成をしており、私は少し失われています。ことはできるのか?だけの"get it"な...
のお役に立てるよう一報いただければ幸いです。
解決
構成のために、スタッククラスはリストベースのクラスを実装または拡張するのではなく、リストを持っている必要があります。継承は「IS A」です。一方、構成は「HAS A」です。関係。
例:
public class StackWithComposition
{
// StackWithComposition HAS A List (rather than IS A List)
private List myList = new ArrayList();
public void push(object item)
{
// add item to myList, etc.
}
public object pop()
{
// return item at top (or end) of myList
}
// etc.
}
生のオブジェクトを処理するのではなく、おそらくこれを汎用クラスにしたいと思うことに注意してください。しかし、これはアイデアです。
この場合、継承ベースのソリューションよりも、構成ベースのソリューションの方がおそらく好ましいでしょう。クラス/インターフェースから継承する場合、自分自身に尋ねるべきです、スタックはリストですか?ほとんどのスタックは、すべての未加工のListメソッドへのアクセスをユーザーに提供するべきではないため、内部データ構造としてListを使用している面を非表示にする方が良いでしょう。合成リストを使用すると、内部構造としてリストを使用しているという事実を完全に隠すことができます。
他のヒント
これは本当の質問ではないと思います。これは、「私の宿題をしてくれませんか」です。質問。
より意味のある質問は次のとおりです。
- 継承と構成の違いは何ですか?
- それぞれにスタックを実装することの利点/欠点は何ですか?
- スタックとは
アンディは3つすべてに良い答えを出しました。
残念ながら、元のポスターの先生は、自分自身が概念をよく理解していないようです。なぜなら、割り当ては無意味だからです。 java.util.Listを実装するクラスはスタックではありません。むしろ、スタックとして使用することは安全ではありません。スタックセーフでない操作をパブリックにする必要があるためです。スタックはリストよりもかなり制限されたインターフェースです。
元のポスターが混乱しているのも不思議ではありません。
の概念を忠実に再現しています。
継承, としての単語んだ"から既存のオブジェクトは可能です。このとして知らである。たとえばトラック する予定であるこ 車両です。
お初のサンプルとは相続できなものをクリックします。おサンプルで"実施"とはありません"拡張"です。
構成 はを構築する場合、オブジェクトを使用その他い組み合わせ。このとして全国的に知られていて-関係性です。たとえばトラック は-A ホイールしない、インストール時にインストール.おサンプルで"拡張"(継承からその他のオブジェクト
最後に インタ にOOPは、"契約"であり、オブジェクトcommitedめた。どの機能又はメッセージオブジェクトが対応いたします。
Javaにおける"インターフェースは、案件の方法でオブジェクトに対応して定義されています。
ですから、スタックについを定義する方法は、スタックにおいて、インターフェース)
public interface Stack {
public void push( Object o );
public Object pop();
}
その利用 継承 を作成できるスタックの実装です。こんに伸ばす(または継承)機能性からその他のクラスです。ということかArrayList
/**
* Sample stack implementation using inheritance
*/
public class ArrayListStack extends ArrayList implements Stack {
// you use the keyword extends because you're inheriting from ArrayList
// and the keyword implements because you claim to respond to push and pop methods.
public void push( Object o ) {
this.add( o ); // add inherited from ArrayList
}
public Object pop() {
return this.remove( this.size() -1 ); // remove inherited from ArrayList
}
}
からだの継承""からのArrayList、多くの必要なものがあります。でも、この表であるrelatioship?もともとスタックは、ArrayListい?
実施のためのスタックを使用 構成 い"を"御オブジェクトとして選択できます。
/**
* Sample stack implementation using composition
*/
public class ComposedStack implements Stack {
// you didn't extend anything here
// But you'll need another object to help you
// to do the work.
private ArrayList holder = .... // Should be declared as List holder = ....
public void push( Object o ) {
this.holder.add( o );
}
public Object pop() {
return this.holder.remove( this.holder.size() -1 );
}
}
の実施が極めて類似したき"追加"や"削除"からのArrayList
その違いは、最初の場合の利用 継承 まずこれら二つの方法が結合おオブジェクトを完全にArrayList自体がまま継承すべてのその他の方法では、属性のArrayListて)
ご利用の際は 構成, ではなく、カップルにおオブジェクトのarraylistの結合が低く、良いもの)だけを別のオブジェクトを支援するのです。この場合にはこのArrayList.
外部からの(構成)、あまり見かけないがArrayListの中、その情報は隠されているのです。は、ユーザ(クライアント)のクラスのみ見える二つの方法"push"と"ポップ"とありがすることが可能とクラスです。このような"現実"スタックです。
遺用拡張キーワード)、クライアントのクラスが見ものすべてのメソッドから ArrayList ことができますが、これしたいとpopを押し、何を防ぎ、クライアントからの利用"removeRange"を備えています。
Conclusión:間の違いを理解するには-aと-aの関係には不可欠OO技術です。このお手伝いいたします。
class stack
{
int n,item,top;
public stack()
{
n=7;
top=-1;
}}
class student extends stack
{
int [] stk=new int[4];
public void insert(int a)
{
if(top>=n-1)
System.out.println("over flow");
else
{
top++;
stk[top]=a;
}
}
public void deletestk()
{
if(top<0)
System.out.println("under flow");
else
{
item=stk[top];
top--;
System.out.println("deleted item are"+item);
}
}
public void destroy()
{
if(top<0)
System.out.println("under flow");
else
{
top=-1;
}
}
public void view()
{
int i;
i=top;
while(i>=0)
{
System.out.println(stk[i]);
i--;
}
}
}
class stackfloat extends stack
{
float [] stk=new float[6];
}
class stkstring extends stack
{
String [] stk=new String[5];
}
class stackmain
{
public static void main(String arg[])
{
stack ob=new stack();
student obj=new student();
obj.deletestk();
obj.insert(5);
obj.insert(6);
obj.insert(64);
obj.insert(45);
obj.insert(3);
obj.view();
obj.deletestk();
obj.view();
obj.destroy();
obj.view();
}
}