ソフトウェア工学

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

8
ここで例外をスローするのはアンチパターンですか?
コードレビューの後、デザインの選択について議論したところです。あなたの意見は何でしょうか。 このPreferencesクラスは、キーと値のペアのバケットです。NULL値は正当です(重要です)。特定の値がまだ保存されていない可能性があり、要求されたときに事前定義されたデフォルト値で初期化することにより、これらのケースを自動的に処理したいと考えています。 説明したソリューションでは、次のパターンを使用しました(注:これは実際のコードではなく、明らかに-説明のために単純化されています)。 public class Preferences { // null values are legal private Map<String, String> valuesFromDatabase; private static Map<String, String> defaultValues; class KeyNotFoundException extends Exception { } public String getByKey(String key) { try { return getValueByKey(key); } catch (KeyNotFoundException e) { String defaultValue = defaultValues.get(key); valuesFromDatabase.put(key, defaultvalue); return defaultValue; } …

9
タスクを実行し、ステータスとしてブール値を返すメソッドの名前を付ける方法は?
方法がある場合 bool DoStuff() { try { // doing stuff... return true; } catch (SomeSpecificException ex) { return false; } } むしろ呼ばれるべきIsStuffDone()ですか? ユーザーは両方の名前を誤って解釈する可能性があります。名前がDoStuff()理由である場合、ブール値を返しますか?名前がIsStuffDone()メソッドの場合、メソッドがタスクを実行するのか、結果のみをチェックするのかは明確ではありません。 この場合の規則はありますか?または、これは欠陥と見なされるため、代替アプローチですか?たとえば、C#などの出力パラメーターを持つ言語では、ブールステータス変数を1つとしてメソッドに渡すことができ、メソッドの戻り値の型はになりますvoid。 編集:私の特定の問題では、メソッドはインターフェイス実装の一部であるため、例外処理を呼び出し元に直接委任することはできません。したがって、呼び出し側は、異なる実装のすべての例外を処理することはできません。これらの例外に精通していません。ただし、呼び出し元はStuffHasNotBeenDoneForSomeReasonException、npintiのanswerおよびcommentで提案されたようなカスタム例外を処理できます。

9
科学/工学で浮動小数点数が頻繁に使用されるのはなぜですか?
浮動小数点数の精度を調査しているときに、いくつかの場所で次のようなステートメントを確認しました。 「floatとdoubleは(設計 / 使用頻度が高い)工学および科学計算」 私の理解では、floatとdoubleの強さは、それらが(良いが完全ではない)精度のために使用するメモリの量です。 私はこの答えからほとんど理解を得ているように感じます 「浮動小数点数を使用すると、連続量をモデル化できます」 私はまだ理解していると確信していません。工学と科学はどちらも、計算から正確な結果が必要な分野のように聞こえますが、私の理解では、浮動小数点は得られません。また、「連続量」が何であるかを正確に把握しているわけでもありません。 誰かがこの説明を拡張して、おそらく例を挙げることができますか?

1
私はJavaScriptをよく知っていますが、コーディングインタビューを爆弾します[非公開]
だから、私は現在、フロントエンド開発者としての新しい地位を探しています。私はJavaScriptを非常によく知っており、クロージャ、カリー化、プロトタイプ継承、デザインパターン、アプリのパフォーマンス、およびフロントエンドアーキテクチャ全体について詩的にワックスをかけることができます。しかし、それでも私は就職面接を爆撃することになります。(FYIインタビューしている仕事のほとんどは、何らかのMVCフレームワークでSPAを構築するためのものです) 通常、コーディングテストは、私がプロとして出会ったことのない小さなコードスニペットです。ある種の数学の問題を解決する関数を書くように。携帯電話を片手に持ちながらコードを書こうとすることや、見知らぬ人に画面を見たり、入力するすべての文字を見たりするという厄介さは別として、私は通常、この種のものを現実の世界では見ません。 これは私が不足している深刻なスキルセットですか、面接官は無関係な質問をします。関数型プログラミングとアルゴリズムチョップに取り組むべきだと思いますが、Web(または印刷物)に多くの良いリソースが見つかりませんでしたか?

10
サブクラスのAPIを汚染する場合でも、自分自身をキャストするオブジェクトを使用しても大丈夫ですか?
基本クラスがありBaseます。2つのサブクラスとがSub1ありSub2ます。各サブクラスにはいくつかの追加メソッドがあります。たとえば、Sub1has Sandwich makeASandwich(Ingredients... ingredients)、およびSub2has boolean contactAliens(Frequency onFrequency)。 これらのメソッドは異なるパラメーターを取り、まったく異なることを行うため、完全に互換性がなく、この問題を解決するためにポリモーフィズムを使用することはできません。 Baseほとんどの機能を提供し、Baseオブジェクトの大規模なコレクションを持っています。ただし、すべてのBaseオブジェクトはa Sub1またはaのいずれかSub2であり、時にはそれらがどれであるかを知る必要があります。 次のことを行うのは悪い考えのようです。 for (Base base : bases) { if (base instanceof Sub1) { ((Sub1) base).makeASandwich(getRandomIngredients()); // ... etc. } else { // must be Sub2 ((Sub2) base).contactAliens(getFrequency()); // ... etc. } } そこで、キャストせずにこれを回避する戦略を思いつきました。 Base現在、これらのメソッドがあります: boolean isSub1(); Sub1 asSub1(); Sub2 asSub2(); そしてもちろん、Sub1これらのメソッドを次のように実装します …

6
HTTP APIは常に本文を返す必要がありますか?
HTTP API応答に関する何らかの標準はありますか? この談話スレッドを読んだ後、私は疑問に思い始めました。私の仕事ではパブリックHTTP JSON APIを開発していますが、厳密に必要でない場合は何も返しません(たとえば、/ resource / {id}へのPUTは、OKまたは対応する4XXまたは5XXコードのときに200のみを返しますが、 JSON本体) {"success":true}上記のリンクで説明したようなジェネリックを返す必要がありますか、それとも「void」ボディを返してすべてをhttp応答コードで処理しても大丈夫ですか?
33 rest  api-design  http 

3
たとえばMicrosoft Wordとは対照的に、プレーンテキストマークアップ言語を使用する場合、開発プロセスに直面する障害は何ですか?[閉まっている]
私は現在、政府の請負業者のインターンであり、Wordはソフトウェア開発プロセスの事実上の標準であるという(当然のこととして避けられない)感じを抱いています。 そのバイナリ形式により、コードベースでの共同作業に慣れている方法でドキュメントを共同作業することは非常に困難です。(ラテックス、Markdownを、再編テキスト、などの言語のプレーンテキストマークアップの使用などは)開発者の通常のワークフローとうまく動作差分フレンドリー文書が可能になります。言語でサポートされていないコメント(Markdownなど)については、マークアップを含む他のプレーンテキストファイルに簡単に適用できるコードベース(GitHub、Bitbucketなど)での共同コメントを可能にする多くの既存のソリューションがあります。 技術的に知識のない管理と協力する必要があることは、あらゆるものに何らかのグラフィカルインターフェイスを必要とすることを理解していますが、これらの形式のほとんどにはそのようなインターフェイスが存在します。たとえば、LaTeXにはLyXと呼ばれる種類の「分岐」があり、グラフィカルなフロントエンドをプレーンテキストのLaTeXのような構文に置きます。このファイルは、主にその編集においてグラフィカルであるにもかかわらず、依然として差分に対応しています。(Wordスタイルのコメントもあります。)これらのソリューションの多くは、Wordの代わりに使用することができ、その大半は無料またはオープンソースです。 ただし、他の誰にも見られない独自の内部ドキュメントにもWordを使用しています。私たちは、キャリアのかなりの部分をテキストで処理します。ドキュメントが特別なのはなぜですか。ささいな「私たちはこれ以上何も知りませんでしたが、今ここで立ち往生しています」とは別に、そのような決定を支持する理由がなければなりません。文書を書く他の、より口語的な(そして議論の余地なく強力な)手段の代わりに平文の文書を使用する際に、ソフトウェア開発プロセスが直面する課題は何ですか? 理由は異なるため、おそらくこれら2つの密接に関連するシナリオに個別に回答する必要があります。 最初からプレーンテキストのドキュメントを使用する 長期にわたるプレーンテキストドキュメントへの移行

2
アダプタパターンとプロキシパターンの違いは?
理解する限りでは、アダプターパターンは、目的の実際のオブジェクトのラッパーオブジェクトを作成しています。これは、もう1つのレベルの間接化であり、柔軟性を提供します。柔軟性は、実際のオブジェクトのインターフェイスが変更された場合、実際のオブジェクトを指すラッパーインターフェイスを変更し、クライアント側の公開インターフェイスを変更しないという点です。 Proxyパターンは、すべてのプロキシラッパーは実際のオブジェクトの機能の唯一のコヒーレントサブセットを提供していることの違いで、同じです。「1つの目的のために1つのクラス」を作成しようとするとき、なぜこれが役立つのかは私にはわかりません。 これを正しく入手しましたか?

5
分割統治アルゴリズム– 2つ以上の部分に分割してみませんか?
クイックソートやマージソートなどの分割統治アルゴリズムでは、入力は通常(少なくとも入門テキストでは)2つに分割され、2つの小さなデータセットは再帰的に処理されます。データセット全体を処理する作業が半分以下で済む場合、これにより問題の解決が速くなるというのは理にかなっています。しかし、データセットを3つの部分に分割してみませんか?四?n? データを多くの多くのサブセットに分割する作業は価値がないと思いますが、2つのサブセットで停止する必要があるという直感が欠けています。 また、3ウェイクイックソートへの多くの参照を見てきました。これはいつ高速ですか?実際には何が使用されていますか?

8
ユーザーストーリーと要件
ユーザーストーリーは、ユーザーがシステムで何をしたいのかを高レベルでキャプチャします。ユーザーストーリーがさらに多くの低レベル要件を推進することを理解しています。ユーザーストーリーはシステムの高レベル要件と同じですか?

3
ASP.NET MVCでコントローラーを単体テストすることで実際の価値はありますか?
この質問がしばらくの間私を悩ませていたので、この質問がいくつかの興味深い答えを与えることを願っています。 ASP.NET MVCでコントローラーを単体テストすることで実際の価値はありますか? それが意味することは、ほとんどの場合(そして私は天才ではありません)、私のコントローラーメソッドは、そのような最も複雑なものであってもです: public ActionResult Create(MyModel model) { // start error list var errors = new List<string>(); // check model state based on data annotations if(ModelState.IsValid) { // call a service method if(this._myService.CreateNew(model, Request.UserHostAddress, ref errors)) { // all is well, data is saved, // so tell the user …

3
RPC風のアプローチがRESTよりも適切なのはいつですか?
Steve VinoskiによるREST、Reuse、Serendipityに関するこの講演を見た後、(XML-)RPC-ishセットアップのグリーンフィールドプロジェクトにRESTがより良い方法で解決できなかったビジネスケースがあるのではないかと思います。 彼が言及したいくつかのRPC問題: 言語に焦点を当てる(分散システムをその言語に適合させ、その逆ではない) 「ローカルに見えるようにする」(およびルールではなく例外として障害と遅延に対処する) 言語に依存しないことを意図しているが、依然として主要な成分として言語間で「関数呼び出し」を持っている IDLボイラープレート 型の安全性の錯覚 そして、さらにいくつか... 少しドラマ化するために、RPC vs RESTのGoogleインスタント結果をいくつか示します。

3
Javaは無料/オープンソースですか?
2006年11月13日、Sunは、GNU General Public License(GPL)の条件の下で、Javaの多くを無料のオープンソースソフトウェア(FOSS)としてリリースしました。2007年5月8日に、Sunはプロセスを終了し、Sunが著作権を保有していないコードの一部を除き、Javaのすべてのコアコードをフリーソフトウェア/オープンソース配布条件で利用できるようにしました。 OpenJDK(Open Java Development Kit)は、Javaプログラミング言語の無料でオープンソースの実装です。これは、Sun Microsystemsが2006年に開始した取り組みの結果です。実装は、リンク例外を除き、GNU General Public License(GNU GPL)の下でライセンスされています。 Javaが言論の自由のようにオープンソースでもフリーでもないという人がまだいるのはなぜですか? 何か不足していますか? Javaはまだ独自仕様ですか?

7
コンストラクターが継承されないのはなぜですか?
コンストラクターが基本クラスから継承された場合、どのような問題が発生する可能性があるのか​​、私は混乱しています。Cpp Primer Plusによると、 コンストラクターは他のクラスメソッドとは異なり、新しいオブジェクトを作成しますが、他のメソッドは既存のオブジェクトによって呼び出されます。これが、コンストラクターが継承されない理由の1つです。継承とは、派生オブジェクトが基本クラスメソッドを使用できることを意味しますが、コンストラクターの場合、コンストラクターが作業を完了するまでオブジェクトは存在しません。 オブジェクトの構築が完了する前にコンストラクターが呼び出されることを理解しています。 子クラスが継承する場合、どうすれば問題につながる可能性があります(継承することで、子クラスが親クラスメソッドをオーバーライドできることを意味します。 オブジェクトを作成するときを除いて、コード内から明示的にコンストラクターを呼び出す必要はないことを理解しています(まだ気づいていません)。その場合でも、何らかのメカニズムを使用して、親コンストラクタを呼び出すことができます[cppでは、使用::または使用member initialiser list、javaでは使用super]。Javaでは、1行目で呼び出す強制があります。最初に親オブジェクトを作成してから、子オブジェクトの構築を続行することを理解しています。 それを無効にすることができます。しかし、私はこれが問題を引き起こす可能性がある状況を思い付くことができません。子が親コンストラクタを継承しない場合、何が問題になる可能性がありますか? これは、不要な関数を継承しないようにするためです。それとももっとありますか?
33 c++  inheritance 

6
「究極のシャッフル」アルゴリズムを作成して、mp3コレクションを並べ替えたい
私は、タイトルとアーティストの重複を避ける方法でmp3ファイルをソートするための擬似コードの提案を探しています。私はクルーナーに耳を傾けます-フランク・シナトラ、トニー・ベネット、エラ・フィッツジェラルドなど、古い基準を歌います。各アーティストは、同じ曲を多数録音します-フライミートゥザムーン、ザウェイユールックトゥナイト、スターダストなど。2000曲あり、20曲がEllaのものである場合、100曲ごとに1回だけ聞きたいです。10人のアーティストがFly Me To The Moonを歌うなら、200曲に1回聴きたいです。もちろん、これら2つの要件を組み合わせて、「究極のシャッフル」を作成します。 これはかなり広範にわたる未解決の質問です。まだプログラミングを始めていませんので、良いアプローチの提案を探しています。実際には、他の曲の属性を均等に配置することに関して他のいくつかの要件がありますが、ここではそれに入りません。 出発点として、ここで見つけたコードを変更して、mp3ファイルを操作し、ID3タグを読み取ります。 以下のparsifalの回答を使用して、私のニーズを満たす小さなアプリを作成しました。ここにフォローアップの質問も書きました。素晴らしい反応をありがとう!

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