X



オブジェクト指向はクソじゃなかったよ Part3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2018/11/22(木) 20:14:06.80ID:egOZHV+V
カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、
オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、
オブジェクトの実際の型を隠蔽したりすることをいう。

偏差値の低い学校向けの情報処理系教科書において「大変すばらしいものであり絶対に使うように」と大体的に宣伝された。

一方、カリフォルニア大学バークレー校の有識者を中心としたインターネットを作った人たちは「階層化の有害性」として
「絶対に使うな」としている。大雑把にいうと、その時は良くても、将来的な改修の際に隠蔽されたデータに
アクセスできないと解決できない問題が出てきて、結果的にデスマーチに陥るというのである。

オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で
縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」
という概念はない。

https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96

前前スレ
オブジェクト指向ってクソじゃね?
https://mevius.5ch.net/test/read.cgi/tech/1535085129/

前スレ
オブジェクト指向ってクソじゃねぇよ? Part2
https://mevius.5ch.net/test/read.cgi/tech/1539872441/
0003デフォルトの名無しさん
垢版 |
2019/05/11(土) 18:10:29.36ID:Se4Lj3bD
こっちのスレもあんのかよw
まともなシステムを開発した経験がある奴いる?
0006デフォルトの名無しさん
垢版 |
2019/10/07(月) 22:03:51.08ID:VbH2HhFT
ところで「チンポがシコシコする」という日本語表現は、文法的に正しいのだろうか?

チンポ「を」シコシコするのではなくて、チンポ「が」シコシコする。この場合、「チンポ」は主語となる。

オブジェクト指向で言う「集約」は2種類あって、全体(俺)と部分(チンボ)が繋がっている場合と、
全体(俺)と部分(チンポ)が別々になっている場合とが考えられる。けれども「チンボ」はそれ自体
が独立した生き物であり、所有者の意思とは無関係に、勃起して「シコシコする」。
例えば寝てる時にエロい夢みて朝起きてみたらチンコが勃起して射精してたとか。

違うか?

「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ!
0009デフォルトの名無しさん
垢版 |
2020/01/16(木) 15:04:41.07ID:TuYxoCDY
オブジェクトのクラスは概念であり、インスタンスは現物である。

チンポはチンポでも人それぞれいろいろなチンポがある、それはクラスとしてのチンポ。
しかしながら自分のチンポは一つしかない、それがインスタンスなのである。
0010デフォルトの名無しさん
垢版 |
2020/01/16(木) 15:32:15.05ID:l5J0jQZo
一般論としてのチンポ論と、自分のチンポが現在どうしているかは、明確に区別して考える!

staticなクラスメソッド・クラス変数は実行時にすでにメモリに呼び出されています。
これに対し非staticな変数やメソッドは、newでインスタンス化した時にメモリに呼び出されます。
staticなクラス変数は、処理の結果によって値が変わるのではなく、クラス毎で統一して持つ値になります。
0011デフォルトの名無しさん
垢版 |
2020/01/16(木) 15:42:23.73ID:l5J0jQZo
非 static なメンバはインスタンスと関連して記憶されています。なので、クラスから非 static
なメンバへアクセスしようとすると、どのインスタンスの メンバ にアクセスしたいのかコンパイラは判別できません。
そのためクラスから非 static なメンバにアクセスすると、コンパイルエラーとなります。
同様にクラスに関連付けられた static なメソッドから 非 static なメンバにアクセスすると コンパイルエラーになります。
0012デフォルトの名無しさん
垢版 |
2020/01/16(木) 15:44:45.48ID:l5J0jQZo
>そのためクラスから非 static なメンバにアクセスすると、コンパイルエラーとなります。

チンポは他人に見せるものではない!
0013デフォルトの名無しさん
垢版 |
2020/01/16(木) 15:51:36.03ID:l5J0jQZo
チンポについて一般論として語るのは良いが、自分のチンポは隠蔽(カプセル化)されるものである!
0014デフォルトの名無しさん
垢版 |
2020/01/18(土) 16:22:08.88ID:xirPIu0H
本体とチンポは、別々のインスタンスとして考えなければならない!
0015デフォルトの名無しさん
垢版 |
2020/01/18(土) 16:24:23.40ID:xirPIu0H
本体とチンポは、マルチスレッドである!
0017デフォルトの名無しさん
垢版 |
2020/01/18(土) 20:48:05.49ID:xirPIu0H
スレッドはメインルーチンとは独立して動くが、これはチンポが本体とは独立して勃起するのと同じ。
0018デフォルトの名無しさん
垢版 |
2020/01/20(月) 19:08:16.49ID:L1zTlUe8
そこでまずこのクラスをスレッドとして動かすことが出来るようにしなければいけません。
スレッドとして動かす為にはThreadクラスのサブクラスとするか、Runnableインターフェースを
実装する必要がありますが、このクラスは既にAppletクラスのサブクラスであるためさらに
Threadクラスのサブクラスには出来ません。よってRunnableインターフェースを実装することになります。
0019デフォルトの名無しさん
垢版 |
2020/01/20(月) 19:15:41.06ID:L1zTlUe8
どのタイミングで作成するかは場合によりますが、通常はアプレットが最初に開始された時
にスレッドを作成します。その為initメソッド内でスレッドを作成しましょう。
またThreadクラスのオブジェクトを作成する時に指定する引数にはスレッドとして動かすクラス
を指定するのでしたから、今回の場合は自分自身である「this」を指定します。
0020デフォルトの名無しさん
垢版 |
2020/01/20(月) 20:40:43.04ID:L1zTlUe8
アプレットは、アプリケーションのように main メソッドを持っていません。しかし、
代わりにアプレットを実行、コントロールするためのメソッドを持っています。
まず、サンプルプログラムと実行方法を説明します。

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
public class HelloApplet extends Applet {
String text;

public void init() {
text = "Hello, world!";
}
public void start() {
System.out.println("starting...");
}
public void stop() {
System.out.println("stopping...");
}
public void destroy() {
System.out.println("destroying...");
}
public void paint(Graphics g) {
System.out.println("painting...");
g.setColor(Color.red);
g.drawRect(0, 0,
getSize().width - 1,
getSize().height - 1);
g.setColor(Color.blue);
g.drawString(text, 15, 25);
}
}
0021デフォルトの名無しさん
垢版 |
2020/01/20(月) 20:49:33.64ID:TMFwfrMm
継承するクラスをAppletからFrameに変更し,mainメソッドを持つクラスを作ってその中から
Frameのinitメソッドを呼び出す,基本的にそれだけです。
https://qiita.com/shima_masa/items/b4a0edb0caad9e36121e
0022デフォルトの名無しさん
垢版 |
2020/01/20(月) 22:32:40.05ID:TMFwfrMm
もちろん逆に、アプレットで作ったソフトを、配布用のアプリケーションにしたい場合も
Appletに代わるFrameを作成し、main()メソッドからインスタンスを生成して実行すればよいのです
0023デフォルトの名無しさん
垢版 |
2020/01/21(火) 10:47:05.19ID:4bpWXhy/
/www.cis.shimane-u.ac.jp/~rokui/lecture/QA/lect4.html
0024デフォルトの名無しさん
垢版 |
2020/01/21(火) 11:57:23.94ID:d8Oaqqlq
ゲームとアニメの違いは、プレイヤーが操作できるか否かだ。
0025デフォルトの名無しさん
垢版 |
2020/01/21(火) 13:54:30.23ID:d8Oaqqlq
コペルニクス以前に「宇宙」「天体」は存在しない!
0026デフォルトの名無しさん
垢版 |
2020/01/21(火) 16:04:45.54ID:3POOz5m6
アプレットの中でアニメーション(リアルタイムゲームを含む)をするのは結構
面倒である.まず,アプレットにはmainがない(書いても呼ばれない)ので,
明 示的にスレッドを作る必要がある.アプレットは Applet クラスのサブクラス で作らなくてはいけないので,Runnable インタフェースを継承することになる.
0027デフォルトの名無しさん
垢版 |
2020/01/21(火) 17:00:00.03ID:d8Oaqqlq
処理はマルチスレッド、描画は同一アプレットで!
0028デフォルトの名無しさん
垢版 |
2020/01/21(火) 17:13:50.07ID:0fQ1TphW
まずごく簡単なサンプルプログラムを作ってみよう。
0029デフォルトの名無しさん
垢版 |
2020/01/21(火) 17:17:20.73ID:0fQ1TphW
描画アプレットは最後でいい
0030デフォルトの名無しさん
垢版 |
2020/01/21(火) 17:19:58.25ID:0fQ1TphW
チンポはそれ自体が独立した生き物であり日々活動しているが、外から見えるのは「皮」だけ。
0031デフォルトの名無しさん
垢版 |
2020/01/21(火) 17:25:55.35ID:0fQ1TphW
チンポがシコシコするそのメカニズムは、億兆の数式でも書ききれない。

外から見たチンポは、最後の表面的な描画アプレットにすぎない!
0032デフォルトの名無しさん
垢版 |
2020/01/21(火) 17:35:46.18ID:E9LLdyau
描画はマルチスレッドしない、肉眼で見る光景は一つだから。
0034デフォルトの名無しさん
垢版 |
2020/01/22(水) 07:55:47.18ID:XnuZbeSJ
アプリケーションとアプレットの共有
これまで、アプリケーションとアプレットを切り離して解説してきました
もちろん、それぞれの機能は別物です

ここで気になるのがアプレットとアプリケーションを組み合わせられないのかということです
つまり、コマンドラインからJDKの java コマンドで実行することができ
かつ、ブラウザでも見ることができるという代物です
0035デフォルトの名無しさん
垢版 |
2020/01/22(水) 08:02:07.12ID:Qq2b8i1H
オブジェクト指向が万能薬のように扱われて
必要もないのに言語に組み込まれていった暗黒時代はクソだと思いたい
0037デフォルトの名無しさん
垢版 |
2020/01/22(水) 21:22:10.90ID:XnuZbeSJ
public static void main(String [] args )
{
FrameApplet frame = new FrameApplet();

frame.init();
frame.setBounds( x, y, width, height );

frame.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e)
{ System.exit(0);}
}
);

frame.setVisible(true);
}
0038デフォルトの名無しさん
垢版 |
2020/01/23(木) 04:22:56.44ID:b1RJU1gm
オブジェクト指向そのものはクソじゃなくてそれを使おうとするやつの頭がクソなだけでしょ
0040デフォルトの名無しさん
垢版 |
2020/01/23(木) 10:09:36.94ID:JgeeW2+j
キーリスナーとグラフィックを分離
0041デフォルトの名無しさん
垢版 |
2020/01/23(木) 13:53:44.16ID:JgeeW2+j
フォーカスは通常、マウスカーソルによるクリックでセットできる。また、Tabキーによっても変更できる。
フォーカスがセットされた、もしくは外されたといったイベントを受け取るためのイベントリスナーはFocusListenerインターフェイスの実装クラスとする必要がある。
0043デフォルトの名無しさん
垢版 |
2020/01/23(木) 15:05:15.80ID:JgeeW2+j
並行 : 複数の動作が論理的に順不同、もしくは同時に起こること
並列 : 複数の動作が物理的に同時に起こること
0044デフォルトの名無しさん
垢版 |
2020/01/24(金) 22:39:45.30ID:CaliZgkn
論理的に順不同wバカなん?w
0045デフォルトの名無しさん
垢版 |
2020/01/26(日) 23:38:04.58ID:pipfilQo
物を知らない人間は自分を賢いと思い込む
ウーマンラッシュアワーの村本しかり
0046デフォルトの名無しさん
垢版 |
2020/01/31(金) 21:26:04.26ID:BNs6JEUK
村本は賢いで?
アイツを叩いとる奴等が自分を賢いと思い込まされた不幸なブタばかりやわ
0049◆QZaw55cn4c
垢版 |
2020/02/06(木) 22:16:05.78ID:6P0xXhLK
>>47
文春だったか新潮だったかで連載をみかけたことがあります
0050デフォルトの名無しさん
垢版 |
2020/03/13(金) 09:58:09.90ID:xi9CPGhb
オブジェクト指向を否定する理由がよく分からんけど
動的ディスパッチと継承まで全部含めないと認めない勢はもっと分からん
0052デフォルトの名無しさん
垢版 |
2020/05/26(火) 09:42:39.39ID:fDcZ5gJW
privateはあっても良い。というか、外部から勝手に変数書き換えられる事を防ぐ方法のない言語はないとまずいだろう。それがバグの温床になる。

最近の言語だとクラス変数(プロバティ)はリードオンリーにできたりするのもあるのでそういうのは直接的にprivate変数を作る必要を減らせる。(例えばKotlin等)。
実際には内部的にprivate変数があってゲッターのメソッドを呼ぶようにコンパイルされるだけのことだがわざわざ自分でゲッターを作ったり呼び出したり書かなくて済んで見た目がスッキリする。
0053デフォルトの名無しさん
垢版 |
2020/05/26(火) 10:26:28.13ID:5zsa2F3Z
プロパティをリードオンリーって最近の言語っていうかC#でもできるじゃん?
Kotlinはそれのパクリでしょ?
0054デフォルトの名無しさん
垢版 |
2020/05/27(水) 07:57:47.39ID:/u1yd5kF
いざというときのためのアクセス手段を排除しておく方が
結局は回りくどい事をたくさんしなくちゃいけなくなって
バグの温床になる
0057デフォルトの名無しさん
垢版 |
2020/05/31(日) 12:43:57.50ID:Jnw0anai
オブジェクト指向プログラムの新人教育には金正恩が解りやすいよね。

クラス→金正恩という概念
インスタンス→金正恩の実体でクラスからいくつでも生成可能
ガベージコレクション→要らなくなった実体の始末
0061デフォルトの名無しさん
垢版 |
2020/06/01(月) 07:19:51.05ID:AVsOuc1a
金正恩は設計図で、設計図から影武者と呼ばれる実体を数多く作り出している
これをテキストに書き出せばオブジェクト指向
最近現れた「顔違うじゃんこいつ誰だよ」って影武者は多態性を表している
0064デフォルトの名無しさん
垢版 |
2020/06/12(金) 13:12:04.55ID:Qkj+08r5
>>53
C#は知らんが、まあパクリなんだろうな。
てかKotlinは沢山パクリがあるような気がするが、こちらとしてはそれで使いやすくなるならそれで良い。
むしろもっとパクれと思う。
0068デフォルトの名無しさん
垢版 |
2020/08/24(月) 12:09:53.90ID:lmfLUas9
ところで「チンポがシコシコする」という日本語表現は、文法的に正しいのか?

チンポ「を」シコシコするのではなくて、チンポ「が」シコシコする。この場合、「チンポ」は主語となる。

オブジェクト指向で言う「集約」は2種類あって、全体(俺)と部分(チンポ)が繋がっている場合と、
全体(俺)と部分(チンポ)が別々になっている場合とが考えられる。けれども「チンポ」はそれ自体
が独立した生き物であり、所有者の意思とは無関係に、勃起して「シコシコする」。
例えば寝てる時にエロい夢みて朝起きてみたらチンコが勃起して射精してたとか。

違うか?

「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ!
0071デフォルトの名無しさん
垢版 |
2020/08/28(金) 18:28:34.79ID:BnzPgwao
多重継承は曖昧だというが、自然言語処理はその曖昧さが大切になる。チンポは随意筋であり不随意筋である。

最終的に,クラス階層は最上位クラスを含めた
最大8 階層から構成され,「伝統的な日本の絵画」
に属する用語に対応する 55 クラスと解説文中か
ら抽出した139 クラスが配置された。ただし,そ
のうち 32 クラスが複数の上位クラスをもつとい
う多重継承が示された。例えば,「ngyc:絵巻物」
は「ngyc:伝統的な日本の絵画」と,「ngyc:表具の
形式」の下位クラスである「ngyc:巻子」の 2 つの
クラスを継承する(図 2)。こうした多重継承は,
本質属性をもつ基本概念と機能を表すロール概念
を分離することで,基本概念による属性継承に限
った階層関係に変更するという考え方もあり 10),
「ngyc:伝統的な日本の絵画」がロール概念で,
「ngyc:表具の形式」が基本概念と捉えることもで
きる。しかし,本研究ではテキストからの情報抽
出に即して配置し,多重継承を許容した階層を導
き出した。
http://www.mslis.jp/am2019yoko/05_kobayashi.pdf
0072デフォルトの名無しさん
垢版 |
2020/08/29(土) 09:12:11.29ID:oUMAS3pz
金正恩はVMでありGC。人民はその上で動いたり消されたりする有象無象の存在に過ぎない。
0073デフォルトの名無しさん
垢版 |
2020/08/29(土) 11:29:42.99ID:Do+gb0AF
VMやGCが手術失敗で植物状態になったらどうなるの?っと。
0078デフォルトの名無しさん
垢版 |
2021/10/22(金) 21:31:08.36ID:BPCPgSiw
>>77
https://tabesugi.net/memo/2009/1a.html
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。

C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:

- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)

- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。

言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
0079デフォルトの名無しさん
垢版 |
2021/10/30(土) 02:09:17.53ID:/YmEOZIF
>>78
意識高い系プログラマが本当のガンで
聞きかじりの非効率な抽象プログラミングモデルを持ち込んで
プロジェクトを保守不能に追い込むのは、よくあるパターン
0080デフォルトの名無しさん
垢版 |
2022/08/13(土) 15:56:12.25ID:JbrEzaSr
オブジェクト指向の難しいところは属人性だと思う
オブジェクトの分け方は人それぞれ
デザインパターンはそれを整理するために生まれたものだと思う

オブジェクト指向なら誰が書いても同じようになりますということなら
扱いやすいんだけれどもそうではない

自分が書くのは良いけど他人が書いたものを読むのはつらい
オブジェクト指向はいろんな書き方ができるPerlのようなものだと思う
オブジェクト指向はPerlです
0081デフォルトの名無しさん
垢版 |
2022/08/13(土) 17:30:32.28ID:9Y2sM84k
STLやBoostは移植できないような特別なシステムコールを要求しないから、移植できると言えるんですよ。
0082デフォルトの名無しさん
垢版 |
2022/08/13(土) 17:32:15.56ID:9Y2sM84k
利那須さんが文句をつけてるのは、メタプログラミングが難しすぎるということで、オブジェクト指向と関係ないのでは?
0083デフォルトの名無しさん
垢版 |
2022/08/13(土) 20:54:05.83ID:mt5asg0H
>>82

>>78
- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。
0084デフォルトの名無しさん
垢版 |
2022/08/14(日) 10:56:25.73ID:VI2zLni0
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。

ここは完全に同意
0085ハノン ◆QZaw55cn4c
垢版 |
2022/08/14(日) 13:12:09.03ID:Q+W1voks
>>84
でも C++11 の UTF-16 関係の機能 basic_string<char16_t> とかは重宝しているので、一概に C++ が悪いとはいえません
この前もwin32 の W 系を使うツールがちょろっと半日で書けちゃったし
https://mevius.5ch.net/test/read.cgi/tech/1434079972/73

悪いのは「デザインパターン」だ!デザパタを強要するやつらだ!
0086デフォルトの名無しさん
垢版 |
2022/08/16(火) 11:17:18.50ID:2x3mrzZQ
basic_string<char16_t> って obsoleted じゃないの?
0088デフォルトの名無しさん
垢版 |
2022/08/18(木) 15:21:11.06ID:E6+QXrSt
オブジェクト指向まじでいらなかったな
全然使ってないからクラスというものを忘れてたぞ
0089デフォルトの名無しさん
垢版 |
2022/08/21(日) 07:34:45.58ID:WWmbtQML
本当に必要なのはオブジェクト指向ではなくて、
誰かがメンテしたそこそこ利便性のあるモジュールライブラリってだけだよな
そんなのFortranの時代からあるってーのw
0090デフォルトの名無しさん
垢版 |
2022/08/21(日) 09:56:05.49ID:ecIOs+Jg
誰かが作った便利なライブラリがあるから言えることだろ
鳥の雛が親鳥が餌を運んできてくれるから翼なんていらないと言ってるようなもの
便利なライブラリはオブシコで作られてるってことを認識したが良い
0091デフォルトの名無しさん
垢版 |
2022/08/21(日) 12:48:07.89ID:j3ukytx2
Cが出た時(すぐには)FORTRANからの置き換えが進まなかったのは
多次元配列のメモリ順が違ってたからだろうな
0093デフォルトの名無しさん
垢版 |
2022/08/21(日) 14:33:34.21ID:TydpFBMU
オブジェクト指向型ライブラリってこれだろ
v = クラスnew
v.setter(1234)
v.func()


別に関数のみを提供する形で
func( :a => 1234 )

newもセッターもゲッターもない風にデザインしたって余裕で作れる
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況