ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

4
Javaでnullステートメントが使用されるのはいつですか?
私がクラスを探してきた教科書で、それは述べられています、ステートメントは空になることができます(nullステートメント)。nullステートメントは、単なるセミコロンとして定義されます。 実行時にはまったく何もしません。nullステートメントはほとんど使用されません。 適度に経験のあるプログラマーとして、めったに使用されないと言うのは興味深いことです。これは、どこかにその使用があることを意味しています。 そのような声明の使用はおそらく何でしょうか?
10 java 

2
Oracle Javaチュートリアルで、チェックされた例外とチェックされていない例外が「論争」と呼ばれるのはなぜですか?
私はJavaが初めてで、例外に関するドキュメントを読んでいました。、特にチェックされていない例外—論争のページ。 一番下の行は言う: クライアントが例外からの回復が合理的に期待できる場合は、チェック済み例外にします。クライアントが例外から回復するために何もできない場合は、チェックされていない例外にします。 記事がわかりません。「論争」とは何ですか?簡単な言葉で説明できますか?

4
Java:セッターの順序が重要ではないステップビルダーを実装する方法は?
編集:この質問は理論的な問題を説明していることを指摘したいと思います。必須パラメーターにコンストラクター引数を使用できること、またはAPIが正しく使用されていない場合はランタイム例外をスローできることを認識しています。ただし、コンストラクター引数やランタイムチェックを必要としないソリューションを探しています。 次のCarようなインターフェースがあるとします。 public interface Car { public Engine getEngine(); // required public Transmission getTransmission(); // required public Stereo getStereo(); // optional } コメントが示唆するCarように、Engineとは必須ですTransmissionが、Stereoはオプションです。つまりbuild()、Carインスタンスが可能なビルダーは、ビルダーインスタンスにとの両方が既に与えられているbuild()場合にのみメソッドEngineをTransmission持つ必要があります。その方法は、型チェッカーが試みが作成することは、任意のコードコンパイルを拒否しますCarせずにインスタンスEngineまたはTransmission。 これには、ステップビルダーが必要です。通常、次のようなものを実装します。 public interface Car { public Engine getEngine(); // required public Transmission getTransmission(); // required public Stereo getStereo(); // optional public class Builder { public BuilderWithEngine engine(Engine …

1
Mercurialでプルリクエストを真剣に実装できないのはなぜですか?
1週間前、私はLFNWにいて、講演後にラリーヘイスティングスと話していたとき、彼は言った(言い換え): Mercurialにはないプルリクエストワークフローを可能にするGitの機能があります。これが、BitBucketのプルリクエストが適切でない理由です。 (コンテキストについては、file-bug-then-attach-patchワークフローとは対照的に、PRワークフローのために、PythonがMercurialからGitに移行しているという事実について議論していました。) 彼はここで何を話しているのですか?私たちのどちらもそれが何であるかの名前を思い付くことができませんでした。運が悪いのでウェブを検索しました。

3
安全でないコードが誤って使用されないようにする
関数f()は、プログラムを実行eval()しlocal_fileているマシンに作成して保存したデータを使用します(または危険なものです)。 import local_file def f(str_to_eval): # code.... # .... eval(str_to_eval) # .... # .... return None a = f(local_file.some_str) f() 私が提供する文字列は自分のものなので、実行しても安全です。 しかし、私がこれを安全ではないもの(ユーザー入力など)に使用することを決定した場合、事態はひどく間違ったものになる可能性があります。また、local_file停止がローカルになると、そのファイルを提供するマシンも信頼する必要があるため、脆弱性が発生します。 (特定の基準が満たされない限り)この関数の使用が安全でないことを「忘れない」ようにするにはどうすればよいですか? 注:eval()危険であり、通常は安全なものに置き換えることができます。

3
責任が共有されているときに単一の責任を管理するにはどうすればよいですか?
私には2つの基本クラスがOperationありTriggerます。それぞれに、特定のタイプの操作またはトリガーに特化したいくつかのサブクラスがあります。Aは、Trigger特定のトリガすることができますOperation。一方、Operation特定のによってトリガーできますTrigger。 特定のものOperationを特定のものにTrigger(またはその逆に)マップするコードを記述する必要がありますが、どこに配置するかわかりません。 この場合、コードは1つのクラスまたは他のクラスに明確に属していません。したがって、単一責任の原則に関しては、コードがどこに属すべきかわかりません。 私はすべてうまくいく3つのオプションを見ることができます。1と2は単なるセマンティクスの選択であるように見えますが、3は完全に異なるアプローチを表しています。 トリガー時、例えばbool Triggers(Operation o)。 操作について、例えばbool TriggeredBy(Trigger t)。 マッピングを管理するまったく新しいクラス、たとえばbool MappingExists(Trigger t, Operation o)。 単一の責任の原則に関して、共有マッピングコードを配置する場所をどのように決定すればよいですか? 責任が共有されているときに単一の責任を管理するにはどうすればよいですか? 編集1。 したがって、実際のコードは次のようになります。すべてのプロパティは、どちらかであるstring、Guid、collection<string>、またはenum。それらは基本的に小さなデータの一部を表すだけです。 編集2。 ブール型の戻り値の理由。別のクラスがのコレクションTriggerとのコレクションを使用しOperationます。との間のマッピングがどこにあるかを知る必要がTriggerありOperationます。その情報を使用してレポートを作成します。

3
対称性の下で一意であるnxnxn立方格子のm点のすべてのセットを生成するアルゴリズム
非常に計算が複雑になるアルゴリズムを実装しています。不要な作業を行わないようにしたいと考えています。 nxnxnの立方格子があります。たとえば、n = 2の場合、これは(0,0,0)、(0,1,0)、(1,0,0)、(1,1,0)、(0、 1,1)、(0,0,1)、(1,0,1)、(1,1,1)。 このラティスから、次のようなmポイントのすべてのセットを再帰的に生成します。 solve(set_of_points) { if set_of_points.size = m, finish do some useful computation here for each point in lattice not in set_of_points: solve(set_of_points + new_point); } これは、空のset_of_pointsから開始して呼び出すことができます。 問題の性質上、実際にはm個の点のすべての順列が必要なわけではなく、立方体の自然な対称性の下で一意であるものだけが必要です。 たとえば、2x2x2の立方体を取り、1点のすべてのセットが必要だとします。上記の基本的なアルゴリズムの下では、1つのポイントの8つの異なるセットがあります。 ただし、立方体の対称性を使用すると、元の8はすべて立方体の対称性の下で同等であるため、これを1ポイントの一意の1セットに減らすことができます(この場合、それらはすべて「コーナー」です)。 立方体が2x2x2でm = 2の場合、基本アルゴリズムには28セットありますが、これは対称性の下では3に減少します(例{(0,0,0)、(1,0,0)}、{(0 、0,0)、(1,1,0)}、{(0,0,0)、(1,1,1)}) 明らかに、3つのポイントセットで計算を行う方が28よりもはるかに優れているので、私の質問は、すでに生成されたセットと対称的に等しいポイントのセットを生成しないようにするにはどうすればよいですか?または、これが不可能な場合は、少なくともセットの数を少し減らすにはどうすればよいですか。 (注-m = 1の場合、これは比較的簡単です。他のどの頂点よりも(0,0,0)に近い点を選択し、境界を少しぼかします。m> 1の場合、本当の問題になる)

3
defを使用して変数を再定義できる場合、それはどのように不変と見なされますか?
Clojureを学ぼうとしても、Clojureが不変のデータについてどのように扱われているかを絶えず知らされるしかありません。しかし、def右を使用して変数を簡単に再定義できますか?Clojure開発者はこれを避けていると思いますが、どの言語でも同じように変数を変更しないようにすることができます。私が読んでいるチュートリアルや本からそれが欠けていると思うので、これがどのように違うのか誰かが私に説明できますか? 例を挙げれば a = 1 a = 2 Ruby(または好みに応じてblub)では、 (def a 1) (def a 2) Clojureで?
10 clojure 

5
コンパイル時の値パラメーターを使用したJavaクラスの生成
クラスが同じ基本的な動作、メソッドなどを実装しているが、そのクラスの複数の異なるバージョンが異なる用途に存在する可能性がある状況を考えてみましょう。私の特定のケースでは、ベクトル(リストではなく幾何学的ベクトル)があり、そのベクトルは任意のN次元ユークリッド空間(1次元、2次元など)に適用できます。このクラス/タイプはどのように定義できますか? これは、クラステンプレートがパラメーターとして実際の値を持つことができるC ++では簡単ですが、Javaにはそのような贅沢はありません。 この問題を解決するために私が考えることができる2つのアプローチは次のとおりです。 コンパイル時に可能な各ケースの実装を持つ。 public interface Vector { public double magnitude(); } public class Vector1 implements Vector { public final double x; public Vector1(double x) { this.x = x; } @Override public double magnitude() { return x; } public double getX() { return x; } } public class Vector2 …

2
Pythonの継承は「is-a」の継承スタイルですか、それともコンポジションスタイルですか?
Pythonが複数の継承を許可する場合、Pythonの慣用的な継承はどのように見えますか? Javaのように単一継承の言語では、あるオブジェクトが別のオブジェクトの「is-a」であり、オブジェクト間でコードを共有したい場合(親オブジェクトから子オブジェクトまで)は、継承が使用されます。たとえば、それDogはAnimal: public class Animal {...} public class Dog extends Animal {...} しかし、Pythonは多重継承をサポートしているため、他の多くのオブジェクトを組み合わせてオブジェクトを作成できます。以下の例を検討してください。 class UserService(object): def validate_credentials(self, username, password): # validate the user credentials are correct pass class LoggingService(object): def log_error(self, error): # log an error pass class User(UserService, LoggingService): def __init__(self, username, password): self.username = username self.password = password …

3
多くの引数を持つコンストラクターの回避
だから私は異なるクラスのオブジェクトを作成するファクトリーを持っています。可能なクラスはすべて抽象祖先から派生しています。ファクトリーには構成ファイル(JSON構文)があり、ユーザーの構成に応じて、作成するクラスを決定します。 これを実現するために、ファクトリはJSON解析にboost :: property_treeを使用します。彼はptreeをウォークスルーし、どの具象オブジェクトを作成するかを決定します。 ただし、製品オブジェクトには多くのフィールド(属性)があります。具体的なクラスにもよりますが、オブジェクトには約5〜10個の属性があり、将来的にはさらに増える可能性があります。 そのため、オブジェクトのコンストラクターがどのように見えるかわかりません。私は2つの解決策を考えることができます: 1)製品のコンストラクターはすべての属性をパラメーターとして想定しているため、コンストラクターは最終的に10個以上のパラメーターになります。これは醜く、長くて読めないコード行につながります。ただし、利点は、ファクトリーがJSONを解析し、正しいパラメーターでコンストラクターを呼び出すことができることです。製品クラスは、JSON構成のために作成されたことを知る必要はありません。JSONや設定が含まれていることを知る必要はありません。 2)製品のコンストラクターは、property_treeオブジェクトという1つの引数のみを想定しています。次に、必要な情報を解析できます。構成内の情報が欠落しているか範囲外の場合、各製品クラスは適切に対応できます。ファクトリは、いくつかの製品に必要な引数を知る必要はありません。ファクトリーは、誤った構成の場合の対応方法を知る必要もありません。また、コンストラクターインターフェイスは統一されており、小さいです。ただし、デメリットとして、製品は必要な情報をJSONから抽出する必要があるため、JSONがどのように構成されているかを認識しています。 私は解決策2)を好む傾向があります。ただし、これが適切なファクトリパターンであるかどうかはわかりません。JSON構成で作成されていることを製品に通知するのは、どういうわけか間違っていると感じます。一方、新製品は非常に簡単に導入できます。 それについての意見はありますか?

2
なぜプログラマーは、並列処理のためにC / POSIXを置き換えるプログラミングモデルを定義するのですか?
新しいコンピューターアーキテクチャのプロバイダーは、定期的に新しいプログラミングモデル(最近のGPGPU向けのCUDA / OpenCLなど)の導入を試み、プラットフォームの並列処理の制御インターフェイスとしてC / POSIXを置き換えます。(Poss&Koening、AM3:2015年のメニーコア向けハードウェアUnixアクセラレータに向けて) なぜアーキテクチャ設計者は、並列プログラミングのためにC / POSIXに取って代わるために新しいプログラミングモデルを設計しようとするのですか?C / POSIXはマルチプロセッサにあまり適していませんか、それともC / POSIXの最初の作者はC / POSIX設計時に並列計算を必要としていませんでしたか?それとも、プログラマーがC / POSIXが提供できるよりも多くの機能を必要としているため、CUDA / OpenCLなどの新しい設計に頼っていますか?

3
テスト用のプライベートセッターによるプロパティのスタブ
オブジェクトがあります public class MyObject{ protected MyObject(){} public string Property1 {get;private set;} public string Property2 {get;private set;} public string Property3 {get;private set;} public string Property4 {get;private set;} public string Property5 {get;private set;} public string Property6 {get;private set;} public string Property7 {get;private set;} public string Property8 {get;private set;} public string Property9 {get;private …

2
コピーオンライトセマンティクスのメリット
コピーオンライトにはどのようなメリットがあるのでしょうか。当然、私は個人的な意見を期待していませんが、それが技術的かつ実用的に有益な方法で具体的な方法で実際に利用できる実際のシナリオです。そして、具体的には、&文字の入力を節約する以上のものを意味します。 明確にするために、この質問はデータ型のコンテキストにあります。割り当てまたはコピーの構築は暗黙的な浅いコピーを作成しますが、変更すると暗黙的なディープコピーが作成され、元のオブジェクトではなく変更が適用されます。 私が尋ねている理由は、COWをデフォルトの暗黙の動作として使用することのメリットを見つけられないようです。多くのデータ型に対してCOWが実装されているQtを使用します。実際にはすべて、動的に割り当てられたストレージがいくつかあります。しかし、それは実際にユーザーにどのようなメリットがありますか? 例: QString s("some text"); QString s1 = s; // now both s and s1 internally use the same resource qDebug() << s1; // const operation, nothing changes s1[o] = z; // s1 "detaches" from s, allocates new storage and modifies first character // s is still "some …
10 c++  qt 

3
私のシナリオに最適なデータストアはどれですか?
データベースで非常に高い更新/選択クエリの実行を伴うアプリケーションに取り組んでいます。 ベーステーブル(A)があり、1日のエンティティに対して約500のレコードがあります。そして、システム内のすべてのユーザーについて、このエンティティのバリエーションがユーザーの設定の一部に基づいて作成され、それらは別のテーブル(B)に格納されます。これは、毎日午前0時に実行されるcronジョブによって実行されます。 したがって、テーブルAに10,000人のユーザーと500個のレコードがある場合、その日のテーブルBには500万のレコードがあります。私は常にこれらのテーブルに1日分のデータを保存し、真夜中に履歴データをHBaseにアーカイブします。この設定は正常に機能しており、今のところパフォーマンスの問題はありません。 最近、ビジネス要件にいくつかの変更があり、現在、ベーステーブルAの一部の属性(15〜20レコード)が20秒ごとに変更され、それに基づいて、テーブルBのすべてのバリエーションレコードのいくつかの値を再計算する必要があります。すべてのユーザー。変更するのは20のマスターレコードだけですが、20秒以上かかる200,000のユーザーレコードを再計算して更新する必要があるため、次の更新が行われると、最終的にすべてのSelectクエリがキューに入れられます。オンラインユーザーから約3 getリクエスト/ 5秒で6-9 Selectクエリが発生します。APIリクエストに応答するために、常にテーブルBのフィールドを使用します。 より多くの処理能力を購入してこの状況を解決できますが、100万人のユーザーでも処理できる適切にスケーリングされたシステムに興味があります。 ここの誰かがより良い代替案を提案できますか?nosql +リレーショナルデータベースはここで役立ちますか?ロックせずにデータを頻繁に更新でき、同時にエンティティのさまざまなフィールドで選択クエリを実行できる柔軟性を提供するプラットフォーム/データストアはありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.