ソフトウェア工学

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

1
Akkaがリアクティブとして販売されているのはなぜですか?アクターモデルはリアクティブですか?
私が理解している限り、アクターモデルとリアクティブプログラミングは別々の概念です。アクターモデルは本質的に私に反応しないようです。 ただし、アクターモデルの実装であるAkkaフレームワークは、リアクティブとして説明されています。 「JavaとScalaのプログラムロジックは、反応型でメッセージを送受信する軽量のActorオブジェクトに存在します。」 「私たちは反応的です」 用語の誤用の場合ですか、それとも完全に正しいですか?アクターモデルの実装(Erlangなど)は既にリアクティブですか?他のメッセージへの応答としてメッセージを生成するだけで、同様にリアクティブと見なされますか? アプローチが対比されるいくつかの関連読書: StackOverflow:RXとrabbitmqやzeromqのようなメッセージングキュー CS.SE:機能的リアクティブプログラミングとアクターモデルはどのように関連していますか? 究極のラムダ:アクターとリアクティブオブジェクト

9
Big n(n ^ 2 + n)/ 2成長率のアルゴリズムに関する質問
この質問をしているのは、大きなO表記に関する1つの側面について混乱しているためです。 Frank Carrano 著の「Data Structures and Abstractions with Java」という本を使用しています。「アルゴリズムの効率」に関する章では、次のアルゴリズムを示しています。 int sum = 0, i = 1, j = 1 for (i = 1 to n) { for (j = 1 to i) sum = sum + 1 } 彼は最初、このアルゴリズムを(n 2 + n) / 2の成長率を持つと説明しています。どちらを見るかは直感的に思えます。 ただし、nが大きい場合、(n 2 + n) / 2はn …
16 algorithms  big-o 

4
多くのパラメーターを持つ単一のメソッドと、順番に呼び出す必要のある多くのメソッド
私は多くのこと(シフト、回転、特定の軸に沿ったスケーリング、最終位置への回転)を行う必要がある生データをいくつか持っていますが、コードの可読性を維持するためにこれを行う最善の方法はわかりません。一方では、必要なことを行うために多くのパラメーター(10以上)を備えた単一のメソッドを作成できますが、これは悪夢のようなコードです。一方、それぞれ1〜3個のパラメーターを持つ複数のメソッドを作成することもできますが、正しい結果を得るには、これらのメソッドを非常に特定の順序で呼び出す必要があります。メソッドが1つのことを行い、それをうまく行うことが最善であると読んでいますが、順番に呼び出す必要のある多くのメソッドがあると、見つけにくいバグのコードが開かれるようです。 バグを最小限に抑え、コードを読みやすくするために使用できるプログラミングパラダイムはありますか?
16 java  readability 

3
Massive View Controller-IOS-ソリューション
私はすべての新しいiOS開発者に次の問題があると確信しています。 これは、2つの基本的な一般的な画面の表示方法です。 1)フォーム画面: 2)テーブルビューコントローラー画面 これまでに、2つの異なるソリューションについて読みました。 最初のソリューション:https://bendyworks.com/single-responsibility-principle-ios/。これは通知に基づいており、View Controllerを(意図)View Modelから完全に分離するため、View Controllerのコードが削減されます。Go-To構造と同様に、コードを壊すという欠点があると思います。次のようになります。 2番目のソリューションは、混雑した同じView Controllerを保持します(ボタンアクションはVC内で実行されるなど)。ただし、TPKeyboardAvoiding、BlocksKitなどのライブラリ、またはそれらのほとんどはカテゴリに基づいたソリューションを使用します。この2番目のソリューションでは、コードは大幅に削減されますが、View Controllerには依然として多くの責任があります。 これらのソリューションについてどう思いますか?どちらが良いですか?より良いものはありますか?
16 mvc  ios  objective-c 

5
なぜメモリからの読み取りは副作用ではなく、ファイルからの読み取りが副作用なのですか?
プロセスメモリからの読み取りを純粋な操作とするのは何ですか?グローバルメモリに100個の整数の配列を作成し、この配列の42番目の要素を取得したとします。副作用ではありませんよね?では、なぜファイルから100個の整数の同じ配列を読み取るのが副作用なのでしょうか?

2
クリーンコードの原則を関数型言語に適用する
現在、Robert MartinのClean Codeを読んでいます。私はそれが素晴らしいと思うし、OOコードを書くとき、私は彼の教訓を心に抱いている。特に、意味のある名前の小さな関数を使用するという彼のアドバイスは、コードの流れをよりスムーズにするものだと思います。次の引用文で簡単に要約できます。 [W] eは、TO段落のセットであるかのようにプログラムを読むことができます。各段落は、現在の抽象化レベルを記述し、次のレベルで後続のTO段落を参照します。 (クリーンコード、37ページ:「TO段落」は、不定詞で表明された文で始まる段落です。「Xを実行するには、ステップYとZを実行します。」「Yを実行するには、...」など。 ) 例えば: RenderPageWithSetupsAndTeardownsでは、ページがテストページであるかどうかを確認し、テストページである場合は、セットアップとティアダウンを含めます。どちらの場合でも、ページをHTMLでレンダリングします 私は自分の仕事のために機能的なコードも書きます。この本のMartinの例は、まるで段落のセットであるかのように読んでおり、非常に明確です。 。 Haskell標準ライブラリから例を取り出します: maximumBy :: (a -> a -> Ordering) -> [a] -> a maximumBy _ [] = error "List.maximumBy: empty list" maximumBy cmp xs = foldl1 maxBy xs where maxBy x y = case cmp x y of GT -> …

7
C#、Javaなどの数学指向コードの読みやすさを改善するにはどうすればよいですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 CプログラマとC#プログラマの両方として、私がC#で気に入らないことの1つは、数学関数の冗長性です。たとえば、サイン関数、コサイン関数、またはべき関数を使用する必要があるたびに、Math静的クラスを追加する必要があります。方程式自体が非常に単純な場合、これは非常に長いコードにつながります。データ型を型キャストする必要がある場合、問題はさらに悪化します。その結果、私の意見では、読みやすさが低下します。例えば: double x = -Math.Cos(X) * Math.Sin(Z) + Math.Sin(X) * Math.Sin(Y) * Math.Cos(Z); 単純に反対 double x = -cos(X) * sin(Z) + sin(X) * sin(Y) * cos(Z); これは、Javaのような他の言語にも当てはまります。 この質問に実際に解決策があるかどうかはわかりませんが、C#またはJavaプログラマーがMathコードの可読性を向上させるために使用するトリックがあるかどうかを知りたいと思います。ただし、C#/ Java / etc。MATLABなどの数学指向の言語ではないため、理にかなっています。ただし、場合によっては数学コードを記述する必要があり、読みやすくすることができれば素晴らしいことです。
16 java  c#  math  readability 

5
一部の技術が「標準」であるとはどういう意味ですか?
私はJava EE 7を学び始めましたが、この「標準」という用語に頻繁に出くわしますが、その意味がわかりません。 したがって、たとえば、この本からの引用は次のとおりです。 W3C標準に依存するSOAPおよびWS- *スタックとは異なり、RESTには標準がなく、設計原則を備えたアーキテクチャのスタイルにすぎません。RESTアプリケーションは、他の多くの標準に大きく依存しています:HTTP、URI、URL ... 私はそれが何を意味するのかについていくつかの考えを持っていますが、私にはわかりません。 私が出会った最も良い説明はここからの定義です。

1
マジックメソッドがC#で実装されたのはなぜですか?
C#では、インターフェイスによってバックアップされることなく、これらすべての魔法のメソッドがポップアップ表示されるようになりました。なぜこれが選ばれたのですか? 説明させてください。 以前のC#では、オブジェクトがIEnumerableインターフェイスを実装すると、foreachループによって自動的に反復可能になりました。インターフェースによってバックアップされているため、それは理にかなっています。Iterator繰り返し処理されるクラス内に独自の関数がある場合、魔法のように何かを意味することを心配せずにそれを行うことができます。 今、どうやら(いつかはわからないが)、これらのインターフェースはもはや必要ではない。正しい命名変換が必要なだけです。 別の例は、いくつかの特定のプロパティを持つ正確 な名前のメソッドを持つことにより、オブジェクトを待機可能にすることGetAwaiterです。 この「マジック」を静的にバックアップしIEnumerableたりINotifyPropertyChanged、静的にバックアップしたりするようなインターフェースを作成してみませんか? ここでの意味の詳細: http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/ 魔法の手法の長所と短所は何ですか?また、これらの決定が行われた理由について何かを見つけることができるオンラインの場所はどこにありますか?
16 c# 

10
なぜ非記述的な内部コードネームを使用するのですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 コードネームの使用はかなり普及していると思います。当社もそれらを使用しています。 しかし、私の主な懸念は、これらの名前が通常どこにも文書化されていないことです。そしてその意味は口コミによって広まります。また、名前は、ツールの機能や名前が付けられたエンティティとは関係ありません。 内部のテストマシンは星座にちなんで名付けられ、公共のサーバーはギリシャの神々にちなんで名付けられているというパターンがあります。また、プロジェクトは、場所またはランダムに選択された映画スターの名前またはキャラクター名にちなんで命名されます。しかし、マシンがWindowsであろうとLinuxであろうと、名前から直接入手できる情報はありません。32または64ビットサーバー。またはプロジェクトの目的は何ですか。 誰かが「Gandalf」プロジェクトや「Callanish」プロジェクトなどのプロジェクトを分岐させたというVCSのコミットメッセージを見ると、私はただひどい気持ちになります。同じ理由で、通常、関数や変数にそのような名前を付けません。 少なくとも新しいエンティティについては、よりわかりやすい名前を使用することを提案しましたが、非常に強い反対に直面しました。明らかに、私以外の組織の誰もがそのようなものを命名するのが大好きです。 では、なぜ記述的でないコードネームを使用するのでしょうか? 誤解しないでください。プログラムのバージョンやマイルストーンの命名に問題はありません。また、マーケティング上の理由から素晴らしい製品名を持っています。しかし、他のすべての場所は説明的な名前を見たいと思います。 編集: コンテキストを提供するために:Gandalfは、コードを64ビットに移植するプロジェクトです。CallanishはAndroidに移植するものです...前者のブランチを64bitporting、後者のandroidportingを呼び出したいです。添付するターゲットバージョンを示すサフィックスが添付されている場合があります。だから誰もがそれが何であるかを名前で知っているでしょう。 問題のサーバーは、製品をテストする仮想マシンイメージです...しかし、実際に実行されている物理マシンはわかりません。したがって、それらをwindowsxp_32、windows7_64、debian_32またはsolaris_64と呼ぶのはまったく問題ありません。

4
複数のHTTPリクエストをマージして帯域幅を節約することをお勧めしますか?
低速のモバイル接続で時々使用される単一ページのアプリケーションを準備しています。その一部は、APIリクエストの点でかなり重い(新しい画面表示のために10個の異なるリソースをフェッチする)。 さて、これらのサービスを、必要なすべてのデータを提供するサービスにマージするのは良い考えですが、RESTの原則に関しては「純粋」ではありませんか?予想される大幅なパフォーマンスの向上はありますか?
16 api  rest  http 

7
複数のデータベース呼び出しは、Web APIのネットワーク呼び出しでは本当に重要ですか?
私の雇用主の1人で、REST(しかしSOAPにも適用されます)APIに取り組みました。クライアント(アプリケーションUI)は、API(Web(一般的な運用展開ではLAN)経由で)を呼び出します。APIはデータベースを呼び出します。 私たちの議論で繰り返されるテーマの1つはパフォーマンスです。チームの一部の人々は、パフォーマンスのために1つのAPI呼び出しから複数のデータベース呼び出し(通常は読み取り)を行うべきではないと考えています。各API呼び出しが(正確に)データベース呼び出しを1つだけ持つように最適化する必要があります。 しかし、それは本当に重要ですか?UIはAPIに対してネットワーク呼び出しを行う必要があることを考慮してください。それはかなり大きいです(ミリ秒単位)。データベースは、メモリ内に物事を保持し、読み取りを非常に迅速に実行するように最適化されています(たとえば、SQL ServerはすべてをRAMにロードして保持し、可能な限りすべての空きRAMを消費します)。 TLDR:すでにLAN経由でネットワーク呼び出しを行っているときに、複数のデータベース呼び出しを心配することは本当に重要ですか?もしそうなら、なぜですか? 明確にするために、私は大きさについて話しています-それは仕様(マシンハードウェア、APIとDBの選択など)に依存することを知っています桁違いに少ない呼び出し、実際に問題ですか?それとも、これ以上の問題がありますか? 編集:後世のために、これらの状況下でデータベース呼び出しを組み合わせてパフォーマンスを改善する必要があると主張するのは非常にばかげていると思います-特にプロファイリングがない場合。ただし、これを行うかどうかは私の判断ではありません。これがWeb API呼び出しを最適化する正しい方法であると考える背後にある根拠を知りたいです。

2
継承、カプセル化、多型がOOPの柱ではないのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 ある日、私はStack Overflowチャットに行って、継承、カプセル化、およびポリモーフィズムがOOPの柱であることを示すフレーズを見ました(それらは基本的なものであり、構築の唯一の意味です)。 また、大学の試験や就職の面接で頻繁に尋ねられる同様の質問があり、正しい答えは常に質問のタイトルで発音された声明でした(「はい、継承、カプセル化、多型はOOPの柱です)。 しかし、Stack Overflowチャットで私はひどく笑され、参加者はそのような声明に強く反対しました。それで、この声明の何が問題になっていますか? プログラマーはソビエト連邦後の大学とアメリカの大学で異なることを訓練されているように見えますか? 継承、カプセル化、およびポリモーフィズムは、US / UKプログラマーによるOOPの柱と見なされていませんか?

3
悪ではないソフトウェア収益化[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 これまでに約800Kのダウンロードがある無料のオープンソースプロジェクトがあります。ソフトウェアにツールバーマルウェアを関連付けたくないので、収益化会社から連絡を受けて断りました。しかし、ソフトウェアを収益化するための邪悪な方法はありますか? 私が知っているオプションは次のとおりです。 寄付ボタンを追加します。 私は本当に「寄付」を必要としないので、私はそれに満足していません-私は非常によく支払われています。 寄付するユーザーは、サポートを受ける権利などを感じる場合があります(最後から2番目の項目を参照) アプリケーション内に広告を追加します。 Webでは許容できるかもしれませんが、デスクトッププログラムでは信じられないほど不完全です。 ダウンロードごとに少量を請求します。 このモデルはモバイルの世界ではうまく機能しますが、デスクトップでは誰もこのモデルに向かないと思います。 オープンソースとうまく混ざりませんが、私はバイナリに対してのみ課金できると思います(ほとんどのユーザーはソースをコンパイルする手間をかけません)。 明示的に支払った後、人々はサポートなどを期待するかもしれません(次の箇条書きを参照)。 プログラムに関連するサービス/コミュニティ/サポートからお金を稼ぎます。 これは私が絶対に取りたくない一つのルートです。コーディング以外の面倒なことはしたくありません。確かに、このプログラムは(シンプルではありますが)一流であり、現時点ではバグを認識していません(ユーザーが報告できるサポートフォーラムやブログコメントがあります)。また、非常にシンプルで、文書化されており、発見できるため、「現状のまま」提供する場合があると思います。 アフィリエイトの提案をインストーラーに追加します。 収益化会社を使用する場合、彼らが提案するものに対するコントロールを失います。質の高い提案を提供するために会社と何らかの強い信頼関係を確立できない限り(それを心から疑います)、私はそれを得ることはできません。 自分のアフィリエイトを選択する(たとえば、Googleツールバーを直接提案する)ことは、おそらく唯一の実行可能な解決策です。問題は、彼のコンピューターにクラッパウェアを感染させるのではなく、ユーザーに実際に価値を与えることができる堅実なアフィリエイトをどこで見つけるかということです。多分バビロン(もちろんツールバーではなく、ツールバーが嫌いだ)と思ったのでしょうか?

4
Javaに「サブクラスのみ」のアクセス修飾子がないのはなぜですか?
Javaには、メソッドに使用可能な4つのアクセス修飾子があります。 public -すべてのクラスがこのメソッドを使用できます。 protected -同じパッケージ内のクラスおよび任意のパッケージ内のサブクラスは、このメソッドを使用できます。 private -このクラスのみがこのメソッドを使用できます。 no modifier ( "package private")-同じパッケージ内のクラスのみがこのメソッドを使用できます。 よく起こるのは、すべてのサブクラスが使用できる便利なメソッドをスーパークラスに入れたいということです。しかし、他のクラスがこのメソッドにアクセスすることは意味がなく、ある意味ではカプセル化を破ります。 したがって、これらの便利なメソッドをスーパークラスpublicまたはで宣言するprotected必要があります。これにより、少なくともパッケージ内の他のすべてのクラスに公開されます。それらはサブクラスによってのみ使用されることを意図していますが。 subclasses-onlyJavaにアクセス修飾子がない理由はありますか?私にはとても奇妙に思えます。何か不足していますか? また、subclasses-onlyアクセス修飾子は、サブクラスにのみ変数を公開する場合にも役立ちます。私にはこれがよく起こります。

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