ソフトウェア工学

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

3
std :: allocatorsがそれほど人気が​​ないのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 CおよびC ++アプリケーションに関する最新の傾向、および最新とは最新の年を意味するため、がstd::allocator実際よりも頻繁に使用されることを期待していました。 現代のアプリケーションは通常、マルチスレッド化されているか、それらの形式で並行性があり、特にゲームやマルチメディアアプリケーションなどの一部の分野では、大量のメモリを管理します。そのため、通常の高額な割り当て/割り当て解除のコストが上昇し、古いアプリケーションよりもパフォーマンスに影響を与えます。 しかし、std::allocators によるこの種のメモリ管理は一般的ではないため、私が知っている1つのライブラリを数えることすらできません。つまり、標準化されたメモリ管理方法に関する理論的根拠を使用しています。 std::allocator人気がないのには本当の理由がありますか?技術的な理由?

4
Javaの配列がequals()をオーバーライドしないのはなぜですか?
私はHashSet先日、これを仕様書に書いているので作業していました: [add()]このセットに要素e2が含まれていない場合、指定された要素eをこのセットに追加します(e == null?e2 == null:e.equals(e2))。 私が使っていたchar[]中でHashSet、私は、この契約に基づいて、以下のことを実現するまで、それはよりも良いではなかったですArrayList!オーバーライドされていないを使用しているため.equals()、私の配列は参照の等価性のみがチェックされますが、これは特に有用ではありません。私はそれArrays.equals()が存在することを知っていますが、などのコレクションを使用しているときは役に立ちませんHashSet。 だから私の質問は、Java配列が等号をオーバーライドしないのはなぜですか?

3
オブジェクトの同一性と可変性
私はJavaの値型の提案を読んでいて、この文に出くわしました。「オブジェクトIDは可変性をサポートするためだけに機能し、オブジェクトの状態は変更できますが、同じ組み込みオブジェクトのままです。」 (仮にではあるが)私が理解していることから、オブジェクトIDは、変数がメモリ内の他の場所にあるオブジェクト(JavaまたはC#のヒープでインスタンス化されたオブジェクトなど)へのポインタまたは参照として機能するという考えです。では、これはオブジェクトの可変性とどう関係しているのでしょうか?これは、たとえば、C ++でスタックにインスタンス化されたオブジェクトが不変であることを意味しますか?ここのリンクが表示されません。

2
どのタイプのプログラミングが実用的なカテゴリー理論を必要としますか?
カテゴリ理論は理論的なコンピュータサイエンスに応用でき、明らかに抽象数学の中心です。また、プログラミングやソフトウェア開発に直接実用化されていると聞いています。 実用的なカテゴリー理論はどのタイプのプログラミングに必要ですか?プログラマーはカテゴリー理論を使用して何を達成しますか? この投稿での「必要」と「必要」の使用に注意してください。ある意味では、ほとんどのプログラマーがさまざまなタイプの理論の経験を持つことで利益を得ると思いますが、カテゴリー理論の使用が不可欠である直接アプリケーションを探しています。やれ。 また、「プログラミングの種類」によって明確にしたいと思います。「関数型プログラミング」のような幅広い答えではなく、「銀行ソフトウェアの作成」や「オペレーティングシステムの作成」のような特定のアプリケーションについては望んでいません。

1
外れ値を減らすためにゲーム数が少ないときにELOアルゴリズムを変更する方法
私はここで見つけることができる標準のELO実装を開発しましたが、私が遭遇している問題は、私のプレイヤーが「シーズン」で10〜40ゲームしか持てないことです。私の最初のシーズンは既に完了しているので(ゲームのOWNレーティングシステムを開始したばかりです)、ELOレーティングのランクは、または少なくともそれに非常に近いはずです。私の問題は、その基本アルゴリズムを実装した後、かなり離れたいくつかの外れ値があることです。 私は10〜40ゲームしかないので、この状況を改善するために最初に考えたのは、このプロセスの周りにループを実装し、1つのサイクルから最終結果のELOレーティングを取得し、それを次のサイクルの開始点として使用することでした(各個人について)プレーヤー)。次に、前のサイクルから現在のサイクルまでのELO定格の平均または最大偏差がX以下になるまで、これらのサイクルを繰り返します。これは、いくつかの大きな外れ値を解決するのに役立ちました。まだ気に入らない小さな外れ値がまだいくつかあります... 例として、私は7つのディビジョンを持っています。ディビジョン1の場合、ELOに基づいて#1にランク付けされる男は5位にランクされ、ディビジョン2の場合、1位にランクされる男は3位になります。これらの種類の外れ値を除いて、各部門のトップ10程度は実際にはかなり近いです。 アルゴリズムを変更するにはどうすればよいですか?または外れ値を試し、減らすためにどのようなアプローチを取ることができますか? サイドノート#1。ディビジョン1の場合、#1であるはずの男が最終的に#5になりますが、実際には、他のレーティングシステムによってシーズン全体で#1にランクされています。その計算方法がわからないだけです(計算されない可能性があり、それに基づいている可能性があります。xプレーヤーがこれでいいので、彼は1位にランクされています)。 サイドノート#2。アルゴリズムを変更しました。私は、勝利/損失がどれほど支配的であるかによって、勝利/損失を「重み付け」したいと考えています。プレーヤーAがプレーヤーBに20対0で勝った場合、特にそれらのレーティングが非常に近い場合に、加重を大きくしますが、レーティングがさらに離れている場合(aがすでにBよりも大きい場合)、ELOの変更はそもそも彼らが最初に勝つと予想されていたからです。したがって、私がしたことは、元の式が使用するようにk係数/値400を使用する代わりに、に変更しました100 + ((score difference) * 2)。したがって、最大k係数は140になります(20-0が最大の勝利で、2を掛けて100に加算されます)。 ウェイト結果を含め、それらの外れ値の一部を修正するために、他にどのような戦略を実装できますか? 目の前にデータがない場合(すべてが家にある)、シナリオをまとめてみます... ディビジョンI #1 Elo Rating of 2250 #2 Elo Rating of 2200 #3 Elo rating of 2190 #4 Elo rating of 2175 #5 Elo rating of 2170 トーナメントで勝つために#5の男が#1を打ち負かしただけで、彼の "作品群"は#1の男よりも完全であるように見えます(別名彼は対戦し、#1の男よりも強い対戦相手を打ちました)。多分それは、「加重」kファクターがこれを捨てているためです。#5の勝ちが2〜5ポイントしかなかったためです。一方、#1勝はより高いマージン、たとえば5〜10ポイントでした。 たぶん、計算された結果を実際の結果に近づけることができるかどうかを確認するために、「重み付けされた」k係数をいじる必要があるだけかもしれません...
8 c#  math 

7
インターフェイスの実装を強制して特定の方法で動作させる方法
次のインターフェースがあるとします public interface IUserRepository { User GetByID(int userID); } ユーザーが見つからない場合、このインターフェイスの実装者に例外をスローさせるにはどうすればよいですか? コードだけで行うことは不可能だと思うので、意図した動作を実装するように実装者にどのように強制しますか?コード、ドキュメントなどを通じてですか? この例では、具体的な実装により、 UserNotFoundException public class SomeClass { private readonly IUserRepository _userRepository; public SomeClass(IUserRepository userRepository) { _userRepository = userRepository; } public void DisplayUser() { try { var user = _userRepository.GetByID(5); MessageBox.Show("Hello " + user.Name); } catch (UserNotFoundException) { MessageBox.Show("User not found"); …

7
追加の書き込みなしにファイルに挿入できないのはなぜですか?(私は追加も上書きも意味しません)
これは、プログラミング言語に依存しない問題として発生します。 内容のファイルがあります aaabddd 私がC後ろに挿入したいときはb、私のコードを書き直す必要dddがあります aaabCddd Cこの位置に挿入できないのはなぜですか? Java、Pythonなどではできません。Linux、Windowsなどではできません。私は正しいですか? C追加の書き込みなしに単純に挿入できない理由がわかりません。なぜこれがそうであるのか誰かが説明してくれませんか?

1
ユーザーにパスワードの変更を許可する場合、新しいソルトを生成する必要がありますか?
私のデータベースには、ハッシュされたパスワードとソルトの列があります。私のアプリケーションでは、ユーザーが自分のパスワードを変更できます。パスワードに同じソルトを使用する必要がありますか、それとも新しいソルトを生成する必要がありますか?アプリケーションのセキュリティは重要ですか?

2
Public / Private関数宣言の起源は何ですか?
質問 パブリック/プライベート関数パラダイムの起源は何ですか? バックグラウンド チャットでCのヘッダーファイルについて質問があり、それらの使用法は主にプログラマーではなくコンパイラーを支援するためのものでした。ただし、これは「プライベート」関数、またはヘッダーファイルでプロトタイプ化されていない関数の概念の最初の使用法であることは私の理解です。Cが関数を宣言するためにヘッダーファイルを使用していなかったとしても、C#またはJavaで見られるようなパブリック関数とプライベート関数の現在の概念はありますか?または、このコンセプトは最初に別の場所で開発され、Cヘッダー/ソーススキームに単純に実装されました
8 history 

3
C ++アプリケーションでの依存関係(DI)の注入
依存性注入で遊んでいますが、正しく実行されているかどうかはわかりません。特に、依存関係が注入されたクラスを構築するための正しい方法が何かはわかりません。 クラスBを作成するクラスAがあるとします。クラスBはクラスCに依存し、クラスCはクラスDに依存します。クラスDの作成を担当するのは誰ですか? クラスAの場合もあります。ただし、大規模なシステムでは、クラスAが非常に多数のオブジェクトを作成してアセンブルする場合があります。 D、C、Bを作成する個別のビルダークラス。Aはこのビルダークラスを使用します。 その他のオプション。 また、DIコンテナーについてもよく読みました。ただし、C ++には主要なフレームワークがないようです。また、私が正しく理解すれば、コンテナーがなくてもDIはうまく実行できます。私は正しいですか?

5
JavaまたはC#の(post / pre)インクリメント演算子の理由
最近、整数に対してポスト/プリインクリメント演算子を頻繁に使用するコードの出力を予測することについて、疑問に遭遇しました。私はCプログラマーの経験があるので、まるで我が家のように感じましたが、JavaがC(またはC ++)から盲目的にコピーしたものであり、これはJavaの役に立たない機能であるとの声がありました。 そうは言っても、Java(またはC#)でその理由(特にpost / preフォームの違いを念頭に置いて)を見つけることはできません。これは、配列を操作してJavaで文字列として使用するようなものではないためです。 。また、私が最後にバイトコードを調べたのはずっと前なので、INC操作があるかどうかはわかりませんが、これがなぜなのかはわかりません for(int i = 0; i < n; i += 1) より効果が少ない可能性があります for(int i = 0; i < n; i++) これが本当に役立つ言語の特定の部分はありますか、またはこれはCプログラマーを街に連れてくるための単なる機能ですか?
8 java  c# 

2
デコレーターパターンを使用して大きなオブジェクトに小さな機能を追加する方法は?
この質問では、Decoratorパターンを使用して、大きなクラスのオブジェクトにほとんど機能を追加しないようにしています。 古典的なDecoratorパターンに従って、次のクラス構造を検討してください: たとえば、これがゲーム内で発生するとします。のインスタンスは、「ラッピング」しているConcreteCharacterDecorator機能に小さな機能を追加するためConcreteCharacterのものです。 たとえば、キャラクターが敵に与えるダメージを表す値をmethodA()返しますint。ConcreteCharacterDecorator単純にこの値に追加されます。したがって、必要なのはコードをに追加することだけmethodA()です。の機能はmethodB()変わりません。 ConcreteCharacterDecorator このようになります: class ConcreteCharacterDecorator extends AbstractCharacterDecorator{ ConcreteCharacter character; public ConcreteCharacterDecorator(ConcreteCharacter character){ this.character = character; } public int methodA(){ return 10 + character.methodA(); } public int methodB(){ character.methodB(); // simply delegate to the wrapped object. } } これは、2つのメソッドを含む小さなクラスでは問題ありません。 しかし、AbstractCharacter15のメソッドを定義するとどうなるでしょうか。 ConcreteCharacterDecorator少しの機能を追加することだけを目的としていますが、すべてを実装する必要があります。 少し機能を追加する1つのメソッドと、単純に内部オブジェクトに委譲する別の14のメソッドを含むクラスになります。 次のようになります。 class ConcreteCharacterDecorator extends AbstractCharacterDecorator{ ConcreteCharacter …

1
SQLクエリをREST APIリクエストに変換する方法は?
データベースへのインターフェースを提供するREST APIの機械で読み取り可能な記述(WADL、Swagger、RAMLなど)があるとします。 私のユーザーは、基になるデータベースに関するクエリをSQLまたは同様のクエリ言語の形式で送信します。ただし、REST APIを介してのみ、データベースに直接アクセスすることはできません。 そのようなSQLクエリを特定のREST APIへの一連のリクエストに変換するシステムを(できれば記述から半自動で)構築するには、どのアプローチを選択しますか? そのような問題をどのように表現しますか?役立つアルゴリズム、理論的フレームワーク、またはツールはありますか? REST APIは以下をサポートします。 読み取り専用操作、つまりSELECTSQLクエリのみ XPartialプロジェクション(例/persons?fields=firstname,lastname) RSQL制約(別の例を/persons?query=firstname==John;department.code==42参照)。 テーブル間の一部の参照(外部キー)はREST APIでは属性として表されますが(Person.department上記の制約の例など)、一部の参照はサブリソース(例:)として表されます/persons/{userName}/projects。つまり、一部のクエリでは、RESTリクエストに関して回答される「計画」を考案する必要があります。 例:「チャックノリスのアクティブなプロジェクトの名前」のクエリは、次のように変換されます。 /persons?query=firstname==Chuck;lastname==Norris userName結果から得る /projects/{userName}?fields=name&query=state==ACTIVE

4
計算が無限に速いときに遺伝的アルゴリズムは必要ですか?
私が理解していることから、遺伝的アルゴリズムは複数のバリエーションを試し、各バリエーションの適合度を評価します。次に、最適なバリエーションを選択し、少し変更して、次の世代に向けてプロセスを続行します。 しかし、無制限の計算リソースがある場合はどうでしょうか?次に、新しい世代を育てる複雑なプロセスに頼らずに、考えられるすべてのバリエーションを試してみて、それらの適合性を評価できますか?言い換えれば、遺伝的アルゴリズムは計算が高価で、総当たりの方法が不可能な場合にのみ必要ですか?それとも、他の利点も追加しますか?

1
Brainfuckの学習から実用的な用途はありますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 Brainfuckは、1993年にUrbanMüllerによって作成された難解なプログラミング言語です。プログラマーを挑発して楽しませるように設計されており、実際の使用には適していません。 しかし、それでも存在し、いくつかの本当にクールなものがそれで書かれています。 私の質問は-Brainfuckの学習/練習はプログラミングの私の知識の深さを増すでしょうか?例:(高水準言語を使用する)高水準プログラマーは、低水準のメソッドと操作の理解を向上させますか?それとも、読み書きが難しいという意味で「コード」のように見えるコードを示すことによって、時間を費やして面白がっている冗談なのでしょうか。

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