ソフトウェア工学

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

4
forループ注釈でこの追加変数を使用する利点はありますか?
私が取り組んでいる大きなプロジェクト(擬似コード)で次のループアノテーションを見つけました。 var someOtherArray = []; for (var i = 0, n = array.length; i < n; i++) { someOtherArray[i] = modifyObjetFromArray(array[i]); } 私の注意を引いたのは、この余分な「n」変数です。このように書かれたfor lopを見たことはありません。 明らかにこのシナリオでは、このコードを次の方法で書くことができなかった理由はありません(私は非常に慣れています): var someOtherArray = []; for (var i = 0; i < array.length; i++) { someOtherArray[i] = modifyObjetFromArray(array[i]); } しかし、それは私に考えさせられました。 そのようなforループを書くことが理にかなっているシナリオはありますか?「配列」の長さはforループの実行中に変わる可能性があるという考えが浮かびますが、元のサイズよりもさらにループしたくはありませんが、そのようなシナリオは想像できません。 OutOfBoundsExceptionが発生する可能性が高いため、ループ内で配列を縮小してもあまり意味がありません。 このアノテーションが役立つ既知のデザインパターンはありますか? 編集 @ Jerry101で述べたように、理由はパフォーマンスです。これが、私が作成したパフォーマンステストへのリンクです:http …

1
Haskell型クラスを使用して可換性を強制する
一緒に交差できる幾何オブジェクトの型クラスを定義したい: class Intersect a b c | a b -> c where intersect :: a -> b -> c -- Language extensions: -XMultiParamTypeClasses, -XFunctionalDependencies アイデアは、さまざまなタイプのオブジェクトを処理できる汎用の交差関数を持つことです。次のようなインスタンスを想像できます instance Intersect Line Plane (Maybe Point) where ... instance Intersect Plane Plane (Maybe Line) where ... しかし、交差点が可換であることも宣言したいと思います。 instance (Intersect a b c) => Intersect b …

1
アワビのようなゲームの六角形ボードロジックを効率的に表現する方法
AIをAbaloneゲームに実装する必要があり、関連するすべてのチェックおよび更新ルーチンで多くのリソースを無駄にせずに、Javaを使用してボードロジックを表現する最良の方法は何か疑問に思っています。 さまざまなリストを使用する方が良いですか?Cellオブジェクトのマトリックス?なにか提案を?

4
プライベートメソッドがプライベートデータにアクセスするためにパブリックルートを使用する必要があるのはいつですか?
プライベートメソッドがプライベートデータにアクセスするためにパブリックルートを使用する必要があるのはいつですか?たとえば、この不変の「乗数」クラスがある場合(少し工夫されていると思います)。 class Multiplier { public: Multiplier(int a, int b) : a(a), b(b) { } int getA() const { return a; } int getB() const { return b; } int getProduct() const { /* ??? */ } private: int a, b; }; 実装できる方法は2つありますgetProduct。 int getProduct() const { return a * b; …

7
OOPはプロパティの概念を含むようにどのように進化しましたか
私はC ++のバックグラウンドから来て、現在の仕事でC#を使い果たしており、パブリックフィールドとプロパティの違いと、このバリエーションと化身の前後の違いについて多くのQ&Aを読んでいます。基本的な質問(たとえば、このSO投稿と関連するすべてのリンクされた質問)。これらの質問はすべて、プロパティシステムの存在を当然とする実際的な違いの観点から説明されていますが、最初のプロパティをサポートすることを決めたすべての言語のデザイナーがこのテーマにアプローチするのは良いと思います場所は考えていました(Wikipediaの記事のリストをチェックしてください)。OOPはC ++ / Javaからどのように進化し、Wikipediaの記事で興味深いことにメソッドとメンバーデータの中間であると特定されました。 「つまり、プロパティはクラスのメンバーコード(メソッド)とメンバーデータ(インスタンス変数)の中間であり、プロパティはパブリックフィールドよりも高いレベルのカプセル化を提供します。」 MSDNはさらに背景を追加します。 「プロパティは技術的にはメソッドに非常によく似ていますが、使用シナリオの点ではまったく異なります。スマートフィールドと見なすべきです。フィールドの呼び出し構文とメソッドの柔軟性があります。」 カプセル化のこの中間レベルが一般的なプログラミングに有用であることが判明したことを知りたいと思います。この概念は、OOPパラダイムを表現したプログラミング言語の最初の化身には存在しなかったと思います。

1
プログラミングにおけるホモトピー型理論の実際的な意味は何ですか?
JavaScript / Rubyの世界から来て、Haskellを学び始めたばかりです。私が遭遇しているhttps://github.com/HoTTとホモトピー型理論の本、私は非常に読み熱心です。 しかし、数学と型理論の概念を学んでいるので、実践的なプログラマにとってホモトピー型理論が何を意味するかを理解するまでに時間がかかるようです。 素人にとって、ホモトピー型理論が実際にプログラミングに与える影響について説明していただけますか?たとえば、特定のことをより簡単に記述できるようにしますか?もしそうなら、どのようなものですか?それとも、以前は不可能だったプログラミングの新しいことを行うことができますか?もしそうなら、どのようなものですか? おかげで、もっと基本的なレベルで頭を包むのを楽しみにしています。

5
技術的な「ユーザーストーリー」をスクラムで書いているのは誰ですか
製品所有者はユーザーストーリーをスクラムで書くべきだと思います。 ユーザーストーリーは、エンドユーザーの機能を説明しています。 しかし、誰が技術的に開発する必要があるのか​​、それをどのように実装する必要があるのか​​を説明します スクラムに関する情報はどこに保存されていますか? それは本当に私に興味があるでしょう! 開発者がストーリーを実装し始めたとき、私たちの会社には知識が非常に不足していますが、実装する方法がわかりません! たとえば、従来のCOM APIを処理する必要があり、その処理方法がわからない場合や、WPF / WEBなどの技術的なスキルがない場合です。 スクラムは、ユーザーがユーザーストーリーから始めるのにどのように役立ちますか?
11 scrum 

2
変更ログとしてMongoDBを使用する2つのシステム間の同期
2つの関連システムを開発しています。そのうちの1つ(A)は、お客様のマシンにインストールされます。残りの(B)は私の組織で使用されます。 各システムには独自のデータベース(リレーショナル)があり、スキーマは異なります。ただし、両方のシステムを同期する必要があります。さらに、Bの一部の変更はすべてのクラスAシステムにエクスポートする必要があり、その他は特定のシステムにのみエクスポートする必要があります。 一部のお客様はインターネットに接続していないため、場合によっては、ファイルの交換を介して同期を行う必要があります。 そのため、次のようにこの問題を解決する予定です。 各システムは、データベースの変更ログを保持しています。MongoDBで実装する予定です。 システムが同期プロセスを初期化するとき、ログから行われたすべての変更を取得します。システムがBの場合、取得される変更は宛先によって異なります。次に、システムはそれらをXML形式でシリアル化し、最後に(ファイルまたはネットワーク経由で)送信します。 他のエンドポイントが変更セットを受信すると、それらのシリアル化を解除します。次に、システムはデータに対していくつかの変換を行います。これは必要な場合があり、最後に変更を記録します。このステップでは、必要な場合、システムは存在する可能性のある競合を解決する必要があります。 最後に、受信側システムはその変更(および競合解決の他の製品)を送信します。 このアプローチは実行可能で、スケーラブルでエレガントですか?どのような変更または追加を行いますか?

2
ASP.NET MVCでは、ビューモデルにIDが必要ですか?
モデルを更新できるASP.NET MVCアプリケーションを開発する場合、更新されたビューモデルを取得し、現在更新されているモデルに戻す方法を知る方法が必要です。これを行うにはいくつかの異なる方法があるようで、これらのいずれかが適切なMVCではないのではないかと思っています(モデルにあるはずのデータをコントローラーに保存させるのは適切なMVCではありません)? すべてのビューモデルにはIDがあります:長所 モデルと一致できることを常に確認してください。 短所 IDが変更されないように注意する必要があります。それ以外の場合は、ユーザーにアクセスを許可しない行を更新させることができます。 最低限のビューモデルのみにIDがあります:長所 ユーザーがアクセスしてはならないデータを更新しないようにするために必要なチェックがはるかに少なくなります。 短所 どのビューモデルがどのモデルと一致するかを追跡するのははるかに困難です。 ユーザーがアクセスできないデータを更新していないことを確認するには、IDを持ついくつかのビューモデルを確認する必要があります。 IDを持つビューモデルはありません: 長所 更新のIDを確認する必要はありません。 短所 あなたは無国籍を放棄しなければなりません。 そこで、2つの質問があります。 まず、正しい/間違った選択肢がありますか?(そうでない場合、選択は意見の問題であり、私の2番目の質問は意見に基づいているため、無視する必要があります。) 第二に、正しい/間違った選択がある場合、それはどれですか? コメントを明確にするために、データベースオブジェクトを模倣したビューモデルがある場合に話しています。 これを考えてください: public class InvoiceViewModel //Does not have ID, does not relate to model. { public CustomerViewModel CustomerVM { get; set; } //Maybe has ID? Does relate to model. public AddressViewModel …
11 mvc  asp.net-mvc 

1
プライバシーポリシーのCreative Commonsライセンスのようなものはありますか?
私は最近、あなたが1年で遭遇するプライバシーポリシーを読むことは76仕事日かかるだろうと読んでおり、それがそれが悪いことであることにかなりショックを受けました。だから私はこれをどのように改善できると考えました。 クリエイティブコモンズライセンスはモジュール式であるため、優れています。 CC:クリエイティブコモンズライセンスであることを示します [-BY]:属性 [-NC]:非商用 [-ND]:派生物なし [-SA]:同様に共有 最終的にそのようなモジュール式プライバシーポリシーを作成できると思います。最終的には、表形式のポリシーの方が優れています。 受け取った情報 あなたが私たちに提供する情報:名前、内容、取引情報、場所、友人 サービスの使用時に収集される情報:サイトアクティビティ情報、アクセスデバイスとブラウザー情報、Cookie情報 第三者: ... 情報の利用 サービスを管理する 第三者に販売する 連絡する ... そのようなモジュール式/構造化された(最終的には機械可読な)プライバシーポリシーを作成する試みはありますか?
11 legal  privacy 

1
本質的にλ計算とは何ですか?
λ計算についての哲学的質問と呼ぶものがあります。 λ-calculusを探索すると、そこでできるすべてのことを見て驚くでしょう。整数、算術演算、ブール値、if-then-elseステートメント、ループ、再帰関数などを定義できます。計算的に完全であることが証明されていると思います。 しかし、反対に、λ-calculusの関数で何ができるかを考えると、できることは関数を渡すだけで別の関数が返されることです。そして、そのプロセスは決して終わりません。 では、どのようにして計算から結果を抽出できますか? 式の結果がfunctionであると仮定しますf。あなたfが期待したものであるかどうかを確認したい。あなたはそれをテストし、あなたが知っている機能を取り、それに適用fして受け取ることができgます。しかし、チェックgが正しいためには、何をするかを検証する必要がありますg。そして、最初からやり直します。では、どうすれば何を伝えることができますfか? λ計算のすべての関数を単一の関数である恒等関数I = λx.xに置き換えることができ、すべてがλ計算で説明されているように機能するように思えます。教会の数字3が与えられfてx戻ってきますf(f(f(x)))。しかし、fとxしかできないのでI、戻りますI。 Iに適用されI、Iを返しますI。だから、I満たすの定義3。「ブール」(λxy.x)と(λxy.y)なりますが必要2つの引数、IおよびIその両方のブール値が返されますI。それぞれが定義どおりに動作する場合でも、それぞれがIDと同等です。 それでは、どのように違いを生みますか?λ計算が単一の関数以上のものを扱うことをどのように示しますか? アイデンティティの概念はありますか?評価せずにすぐに関数を識別できますか?2つの関数が等しいかどうかをテストする方法がないことが証明されたと思います。 または、λ計算は関数ではなく、関数の正式な記述についてですか?つまり、λ式は関数が行うことを定義するだけでなく、関数が操作するデータでもあることを意味します。したがって、を記述する場合A B、には適用さAれませんBが、文字列で記述されAた関数を、B別の形式定義を返すことに含まれる関数の形式定義に適用します。 λ計算では実際に何が起こっているのですか?それが扱う数学的オブジェクトは何ですか? ファローアップ: OK、以下の回答から、λ計算は数学的な意味での関数ではなく、λ式として表現できる関数のサブセットに関するものであるようです。または、λ表現の操作についてさらに詳しく説明します。

2
素人の言葉で言えば、左再帰とは何ですか?
code.google.comの1ページによると、「左再帰」は次のように定義されています。 左再帰とは、再帰的な非終端記号を指し、それ自体を含む知覚形式を生成する場合、それ自体の新しいコピーが生成規則の左側に表示されます。 ウィキペディアには、2つの異なる定義があります。 文脈自由文法の観点では、rの生成(「代替」)の左端の記号がすぐ(直接/即時左再帰)または他の非終端記号を介して、非終端記号rが左再帰である場合定義(間接/非表示の左再帰)は、rに再度書き換えます。 「文法が左再帰的であるのは、それ自体が左記号として最終的に文型を導き出す非終端記号Aを見つけることができる場合です。」 私はここで言語作成を始めたばかりで、暇なときにそれをやっています。ただし、言語パーサーの選択に移ると、このパーサーで左再帰がサポートされているか、そのパーサーがすぐに前面および中央に表示されるかが問題になります。「文型」などの用語を検索しても、専門用語のリストが表示されるだけですが、「左」再帰の区別はほとんど非常に単純でなければなりません。翻訳をお願いします?

5
Cの静的ライブラリは眉をひそめていますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 共有ライブラリを持つための2つの引数があります。 ディスク容量を削減するのに役立ちます。 共有ライブラリが更新されると、それに依存するすべてのバイナリが更新を取得します。 共有ライブラリには主に1つの欠点があります。 彼らは依存性地獄を導入することができます。 デスクトップコンピューターでは、第1の利点はもはや成り立ちません。最近では、ディスク容量の無駄遣いはあまり問題になりません。 静的バイナリを使用すると、パッケージマネージャーの質が向上します。つまり、依存関係の地獄は過去のものになります。プログラムを追加すると、単にバイナリが追加されます。最終的には、ファイルを処理するためのフォルダー。プログラムを削除すると、単にこのファイルが削除されます。依存関係?消えた。 2番目の利点はまだありますが、デスクトップコンピューター上の静的バイナリの利点はそれよりも重要だと思います。つまり、Goのような新しい言語でさえ、共有ライブラリの利点にもかかわらず、すべてのバイナリをコンパイルします。これは利便性のためです。 共有ライブラリの主な利点の1つはもはや大したことではないので、Cの静的ライブラリはまだ嫌われていますか?もしそうなら、なぜですか?
11 c  compiler 


4
アーキテクチャ(リアルタイム戦略ゲームのNPC)の多重継承に代わるものはありますか?
コーディングは実際にはそれほど難しくありません。難しい部分は、理にかなっており、読みやすく、理解可能なコードを書くことです。だから、私はより良い開発者を獲得し、強固なアーキテクチャを作りたいと思っています。 それで、私はビデオゲームでNPCのアーキテクチャを作成したいと思います。これは、Starcraft、Age of Empires、Command&Conquersなどのようなリアルタイム戦略ゲームです。したがって、さまざまな種類のNPCがあります。A NPCは、これらの多くの能力(メソッド)に1を持つことができますBuild()、Farm()とAttack()。 例: 労働者がすることができますBuild()し、Farm() 戦士缶Attack() 市民缶Build()、Farm()とAttack() 漁師ができるFarm()とAttack() これまでのところすべてが明確であることを願っています。 だから今、私は私のNPCタイプとその能力を持っています。しかし、技術的/プログラム的な側面を見てみましょう。 さまざまな種類のNPCに適したプログラムアーキテクチャは何でしょうか。 さて、基本クラスを持つことができました。実際、これはDRYの原則を守る良い方法だと思います。WalkTo(x,y)すべてのNPCが移動できるため、基本クラスのようなメソッドを持つことができます。しかし今、本当の問題に取り掛かりましょう。自分の能力をどこで実装しますか?(覚えておいてください:Build()、Farm()およびAttack()) 能力は同じロジックで構成されるため、各NPC(Worker、Warrior、..)にそれらを実装することは、DRYの原則に迷惑をかける/破るでしょう。 さて、基本クラス内に能力を実装できました。NPCは、能力Xを使用することができる場合、これは検証というロジックのいくつかの種類が必要になりIsBuilder、CanBuild、..私は私が表現したいものを明確だと思います。 しかし、私はこの考えにあまり気分がよくありません。これは、機能が多すぎる肥大化した基本クラスのように聞こえます。 プログラミング言語としてC#を使用しています。したがって、ここでは多重継承はオプションではありません。手段:のような追加の基本クラスがあるFisherman : Farmer, Attackerと機能しません。

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