「オブジェクト指向」を含む日記 RSS

はてなキーワード: オブジェクト指向とは

2023-09-27

anond:20230927200327

でもガチCS勉強しようと思ったらアルゴリズムデータ構造必須で、それに適した言語となるとC以下あれやこれやでしょ。

あと、デザインレシピかいう考え方なら OCaml とかの関数型言語が入門に適しているし、オブジェクト指向ならCじゃ無理だし。

オブジェクト指向で学ぶ人生

Microsoft本社入り口に貼ってあるらしいコード

時は金なりという意味か?

    public class Person {
        BasicInfo info;
        float stock;
        float Value;
        public string Name(bool isSpy){
            return isSpy ? info.Name : info.Name.ToSecondName();
        }
        public string Sex(bool isNormal){
            return isNormal == info.isMan ? "Man" : "Woman";
        }
        public float Earn(bool isExtra = false){
            float sexPad = info.isMan ? 1f : 0.5f;
            float racePad = info.isWhite ? 1f : 0.5f;
            var delta = DateTime.Now - info.Birth;
            int age = (int)(delta.TotalDays / 365);
            float result = Value * sexPad * racePad * age;
            if(isExtra){
                Value += result;
            }
            return result;
        }
        enum Race{
            White, Black, Yellow
        };
        class BasicInfo{
            public string Name;
            public int NationalId;
            public bool isWhite;
            public bool isMan;
            public DateTime Birth;
            public BasicInfo(string Name, int NationalId, Race race, bool isMan){
                this.Name = Name;
                this.NationalId = NationalId;
                this.isWhite = race == Race.White;
                this.isMan = isMan;
                Birth = DateTime.Now;
            }
        }

2023-09-19

大半のプログラマー草野球レベルなんよ

40歳プログラマー目指すのは全然構わないけど

一線級のプロになれるとは思わない方がいい

40歳から野球始めてプロになれるわけないだろ?

それまで他のスポーツで一線級の活躍をしていて

センスや基礎体力が十分あるならワンチャンあるかもしれんけど

普通に考えたら無理だから

そんで巷に溢れてるドヤ顔するプログラマーも9割が草野球レベルなんよ

コードレビューしてみたらびっくりするレベルコード書いてるのに

本人はやたら自信満々でコメントに対しても

「これでは何故ダメですか?」

とか言ってくるの勘弁してくれ

必ずしもオブジェクト指向で書く必要はないけれどオブジェクト指向が何を目指しているか理解してくれ

パッと見た感じはちゃんとしてるように見えるけれどプロでは全然通用しないレベルなんよ

草野球めっちゃ上手い人って素人が見るとプロでも通用しそうだけど

実際にはそんな訳ないし、プロもっとレベルが高いところで競ってるんよ

高校野球甲子園出ました!」

っていう一般人から見ると神のような人材でもプロにはなれないんよ

プログラマーとかプロ野球ってそういう世界だし、だいたいどこもそういう世界から

2023-09-12

オブジェクト指向知らんやつのコードはクッソ汚い

20年ぐらいプログラミングやってるっていう40代の人とペアプロしてるんだけど

コードが汚すぎてPRにめちゃくちゃ時間かかる

変数ほとんどがグローバル的な扱いで独自命名規則宣言しるし

その命名規則全然守られてないしスペルミスも多くて読んでてイライラしてくる

根本的な作り方が無茶苦茶ちゃんと動いてるのかバグがあるのかも分からん状態

PR出てくる度に打ち合わせして、そもそもデータ構造とか機能分割について指摘してるんだけど

この前ふと

「そういやJavaで書いたことありますか?Javaだとこんな感じですよね」

って話したらJava知らんと言われた

で、聞いてみたらオブジェクト指向言語で書いたことないし勉強したことも無いとのこと

JavaなりC++なりオブジェクト指向言語で書ける必要は無いけれど

少なくともデータ堅牢性とか再利用性とかの考え方は知っといて欲しい

とはいえ20年もそれでやってきてるんだから今更無理だろうなぁ

2023-08-22

anond:20230822072927

ウェブなら素よりreactのほうがマシだけど、vue 1, 2くらいが一番良い気がする。vue 3になった瞬間理解不能になった。一般人理解できるのは現実の物のようにイメージできるオブジェクト指向までで、それ以上抽象化されると理解不能になる。ウェブ互換性のためにjavascriptをだましだまし使う必要があって、快適にするために過剰に複雑になっている気がする。Delphiマウスで開発してる時代が一番楽しかった

2023-08-01

エンジニアソフトウエア)の禁忌しぐさを教えてください

ソフトウエア・ウェア開発者で、こんなことを言うとアンタッチャブルにされるような発言を教えてください。個人的には、以下の感じかな?



こんな感じかな。

プログラマー言葉化学的に言い換えるなら

データ構造

結晶構造みたいなものリスト構造とか種類があるが、元素のように新規人類新規発見するのは困難になりつつある。

アルゴリズム

たとえば黒鉛炭素同位体であるダイヤモンドに変換できる可能性があるが、その変更プロセス多種多様であるコストエネルギー効率のためにベスト方法をチョイスされるように、計算量という律速段階のようなもの比較される。

ビットバイト

1mol が 6.0e23 個の原子と同じように、1バイトは8ビットであるバイトにするメリットは、英語圏だと 1バイトも有れば日常で使う文字コンプリートできるのだ。

理想気体実在気体】

計算機で使われる浮動小数点数は実は実数ではない。たとえば、0.4f - 0.3f は 0.1f でない。ただし、0.5f - 0.25f は 0.25f である

オブジェクト指向

アボガドロ分子論みたいなもの最初キモがられた。

ファンクショナルプログラミング

フッ素分子F2)を作ろうとした努力プログラミングでもやろうとしたもの

アスペクト指向

ポインターインターセプトするための道具。電気泳動するためのツール

オライリー

出版社シュプリンガーみたいな?

インフルエンサー

錬金術師(対価はカモの財布)

JAVA

ティーでなく、コーヒー

Ruby

Al2O3。

Perl

Pearl でない。

2023-07-31

anond:20230730145051

でもさ、未だに Python2 しか書けない残念なアラフィフもいるのさ。EOL 来ていても中途半端需要もあるせいか引退時期を間違えるやつも多いのがこの業界の悪いところなんだよ。そいつさ、未だに Private な関数の書き方がわかんないみたいだし、is とか使うのだぜ?オブジェクト指向かいレベルでないし、引数の型を指定する意味とかも「めんどくさいよね」とか言って勉強しないんだよ。はっきり言って、消えてほしい。だから、ほんとうは勉強しないと消えざるを得ない世界のがまともなんだよ。おそらく彼は3年以内には仕事がなくなるだろうけど、年金をもらえるまで20年ぐらい無職かもしれない。リカレント教育とかも、年齢制限あるからな。コンバートは早めにだな。

2023-07-07

Python学習の中級編カリキュラム案 その2

Pythonの本を何冊か眺めてみて、中級以降の学習方針を考え直してみた。

 

ゴールの設定

 

初級編

プログラミング初心者が、プログラミングの基本を理解することが目標

 

中級編

Python文法理解して、初心者を脱した人が次に取り組むべき課題は、実用的なアプリを作れることが目標

ここを2段階に分けて、

  1. 第1段階:自分が使うアプリを作る
  2. 第2段階:他人も使うアプリを作る

というステップを踏むことにした。

 

具体的には、テストの有無が違う。

テストのやり方を学ぶには、それなりに時間がかかるので、テストに関する学習を先にやるか、後回しにするかの違いがある。

テストのやり方を学ばなくても、つまり品質を保つ方法を知らなくても、練習の段階ではバグだらけでもOK判断した。

自分けが使うアプリ場合テストなしでサクッと作って良い。

自分だけでなく、他人も使うアプリ場合バグがあっては困るので、やはりきちんとテスト実施して、品質を保つ必要がある。

 

先にアプリの作り方を学び、その次に品質を保つためにテスト必要性を理解して、テストのやり方を学ぶという順番が自然であるような気がした。

アプリが作れず、テスト必要性も理解できない段階でテストのやり方を学んでみても、いまいち学習モチベーションが高まらず、知識を吸収しづらいのではないか?という仮説に基づいた判断である

 

中級編の前半(テストなしでアプリを作る練習

中級の前半も2段階に分ける。

  1. RDBSQLデータの永続性)なしで作れる簡易なアプリ … サンプルを見たら、しょぼいGUIゲームとか作ってた。小中学生あたりなら楽しめるのかもしれない。
  2. RDBSQLデータの永続性)ありで作るWebアプリ … SQLを学ぶのに少し時間を取られるね。
    1. DJangoなどのWebフレームワークを使う場合
    2. Webフレームワークなしで素のPythonで作る場合

などのステップ必要か?

 

ということで、

  1. TkinterなどのGUIツールを利用して、しょぼいゲームを作る。
  2. RDBSQL)を利用して、Webアプリを作る。

という2段階に分けてみたい。

しかし、いずれにせよ、最初テストなしでどんどん作ってしまう。

 

中級編の後半(テストありでアプリを作る練習

この段階で初めて、Pythonテスト技法テストスイーツの使い方を習得する。

客に納品できる品質アプリを作れるようになったら、プログラマー仕事をやってもいい。

 

とりあえず、そんなところかな?

2023-07-05

anond:20230630185828

54ページに参考文献が掲載されていた。

京都大学Python入門講座の補助教材として推奨されているようだ。

本講座が難しいと感じる初心者向けの副読本なのだろう。

 

参考文献

Python に関する書籍は近年,数多く出版されていて,どれを買っていいのか迷うかと思います

以下,いくつか挙げておきます

このほかの書籍図書館などで探される際には Python Version 3 を扱っていることを確認してください.

 

[2] Bill Lubanovic 著,鈴木 駿 監訳,長尾 高弘 訳:入門 Python3 第2版, オライリー・ジャパン (2021)

[asin:4873119324] 2021/3/22

データサイエンスウェブ開発、セキュリティなど、さまざまな分野で人気を獲得してきているPython

本書は、ベストセラー『入門 Python 3』の6年ぶりの改訂版で、プログラミング初級者を対象としたPython入門書です。

プログラミングおよびPythonの基礎からウェブデータベースネットワーク、並行処理といった応用まで、実践を見据えたPythonプログラミングをわかりやすく丁寧に説明します。

Python 3.9に対応し、f文字列などの新機能も追加され大幅にボリュームアップしました。

Python機能をひと通り網羅し、リファレンスとしても便利です。

 

この本は、薄い入門書じゃなくて、わりと厚めの詳細な説明が書かれている本。

リファレンス的に使うような本でもあるので、まったくプログラミングをやったことがない本当の初心者だと、この本を読んで理解するのは大変なんじゃないかと思う。

すでに他のプログラミング言語習得しているプログラマーで、Python言語仕様を1冊の本で把握した人には、本書は向いていると思う。

 

1冊目にこれを持ってくるあたり、受験勉強知識の丸暗記に長けたガリ勉ならOKかもしれないが、勉強が得意じゃない人にはちょっといじわるなチョイスではないか?と穿ってしまった。

一応持っておいて普段本棚の飾りにしつつも、必要とき辞典的に使えばいいのではないか?と思う。

自分なら、この本は2冊目以降に推奨するだろう。(1冊目には勧めない)

  

[3] 柴田淳:みんなの Python 第 4 版,SB クリエイティブ (2017)

[asin:479738946X] 2016/12/22

Python入門書デファクトスタンダードが4年ぶりに大改訂

近年、Pythonの利用が、機械学習AIなどの科学技術分野へ大きく広がっている現状を踏まえて、すべてのパートに手を入れいくつかの新章を追加しました。

次の10年を担うPythonプログラマ養成するための一冊。

 

Chapter01 プログラミング言語Python

Chapter02 Pythonプログラミングをはじめよう

Chapter03 Pythonの基礎をマスターする

Chapter04 組み込み型を使いこなす

Chapter05 Python関数型プログラミング

Chapter06 クラスオブジェクト指向開発

Chapter07 クラス継承と高度なオブジェクト指向機能

Chapter08 モジュール

Chapter09 スコープオブジェクト

Chapter10 例外処理

Chapter11 標準ライブラリを使う

Chapter12 Pythonデータサイエンス

Chapter13 Pythan2

 

・AnacondaやJupyter Notebookなど、Pythonの最新開発環境対応

・NumPy、matplotlibなどの科学技術ライブラリ対応

WindowsmacOSLinux対応

 

イラストや図解を多用しているので、一見すると初心者向けのように見えるけど、1冊目としてはどうだろうか?

やはり、この本も2冊目以降に読んだ方が良い本になってしまうだろうか?

悪くはないと思うけど、自分なら読まないかもしれない。

Amazonレビューでも、結構酷評されてるね?

買いたい人は、本屋で内容を確認してから買った方が良いと思う。

 

[4] 大津真:基礎 Pythonインプレス (2016)

[asin:484438015X] 2016/3/4

本書で解説するPython現在もっとも注目を集めているプログラミング言語ひとつです。

プログラミング言語の人気度の目安となるPYPLでは、2016年1月の時点でJavaに続いて2位に位置していることからも、その人気のほどが伺えるでしょう。

その大きな理由として、Pythonがパワフルなオブジェクト指向スクリプト言語でありながら、わかりやすく、すっきりしたプログラム作成可能であることがあげられます

文法シンプルで、これからプログラミングを始める方にとっても最適な言語です。

現在Pythonは、Python 2.x系からPython3.x系への移行時期にあります

Python 3.xでは、さまざま機能強化が行われ、さらに標準の文字コードユニコードベースに変更され、日本語も容易に扱えるようになったこから日本においてもさらなる普及が期待されるでしょう。

 

本書は、プログラミング初心者対象にしたPython 3の入門書です。

変数の取り扱いから、リスト、タプルといったPython固有のデータ操作制御構造関数などについて具体的でかつ短いサンプルを多数提示しながら、初心者でも基礎から学んでいけるように拝領したつもりです。

また、インデントブロック表現する点などなど、他のメジャー言語と比べてユニークな部分も丁寧に説明しています

前半部分で基本を説明した後は、ファーストクラスオブジェクトとしての関数活用方法オリジナルクラス作成などといった多少高度な項目を丁寧に説明していきます

 

Chap1 Pythonプログラミングをはじめるための予備知識

Chap2 Pythonの基礎について学ぼう

Chap3 プログラムの流れを変えたり処理を繰り返したりする

Chap4 組み込み型の活用方を理解しよう

Chap5 オリジナル関数作成する

Chap6 テキストファイルの読み書きを理解しよう

Chap7 オリジナルクラス作成する付録 開発ツールとの連携設定

 

Amazonサンプルページを見たら、お勧めエディターとして「Atom」が紹介されていた。

から7年前ならAtomでも良かったのかもしれないけど、今ならVisual Studio Codeの方が使い勝手が良いのではないだろうか?

7年前の情報という点を考慮して、検討したい。

Python文法説明に関しては悪くないと思うけど、自分なら読まないかもしれない。

 

[5] 松浦健一郎,司ゆき:はじめての Python エンジニア入門編,秀和システム (2019)

[asin:4798058327] 2019/5/25

■きちんと学びたい人のための最短教科書。■

Python開発者に求められる言語ツールライブラリなどの知識を、1冊で素早く学べます。■

 

「はじめて」でも「よくわかる」5つの必達ポイント

(1) Python言語効率よく習得できる文法入門。

(2) 豊富な例題で頭と手を刺激しながら学べる。

(3) 数多くの定番ライブラリや必携ツールを1冊で体験

(4) 人気のAIデータ分析Webフレームワークにも対応

(5) 開発したプログラムPyPIGitHubで公開できる。

 

可もなく不可もなくというかんじで、ありがちな入門書であるように見えた。

同じ著者の本なら、[asin:4815607648] Python[完全]入門 (2021/1/22) の方が良いのではないか

発売年もこっちの方が新しいし、受験参考書っぽい作りで、各項目の要点が頭に入ってきやすい。

Amazonサンプルページを見て、自分の好みの方を選んだら良いと思う。

この本なら1冊目でもお勧めできそうだ。

(ただし、自分場合はすでにオンライン教材を入門を済ませてしまったので、今さら読む必要はないけど)

時間があったら、図書館で借りてレビューしてみたい。(買うとは言ってない)

 

[6] 大澤文孝:いちばんやさしい Python 入門教室ソーテック社 (2017)

[asin:4800711592] 2017/4/8

はじめは誰でも未経験者!

Pythonプログラミングの基礎を身につけよう!

 

本書はプログラミング言語Python」の「いちばんやさしい」入門書です。

 

○「興味はあるけど、難しそう」と尻込みしている人

○「そもそもプログラミングって何?」という未経験

○「一度試したが、挫折してしまった」という初級者

○「スキルアップのためにPythonを学びたい」という経験

 

そんなPythonビギナーに向けて、プログラム根本概念、基礎知識、基本文法をきっちり端折らずに説明します!

さらには、「簡単計算」「ゲーム作成」「GUIアプリ」「モジュール活用」など、

実際に手を動かしながらの演習を通して、学んだことがしっかり身につくように構成しました。

 

豊富カラー図解とイラストで、初心者にも分かりやすい!

本書を一通り終えれば、Pythonのみならず、プログラミングの基本がバッチリ学べます

 

さあ、あたなもこの本をきっかけに、Pythonプログラミング世界に飛び込んでみませんか?

 

この著者の本は、他の本なら持っている。

本当に分かりやす説明するのが上手い方だと思う。

簡単な内容しか説明してないけど、他の本なら挫折してしまうようなガチ初心者でも、この本なら理解できるだろう。多分、中学生ぐらいが読んでも理解できると思う。

自分には物足りないような気がするので敢えて読もうとは思わないが、1冊目にお勧めするチョイスとしては間違ってないと思う。

 

[7] コーリー・アルソフ著,清水川貴之訳:独学プログラマー日経 BP (2018)

[asin:4822292274] 2018/2/24

本書は「Pythonだけ」を学ぶ本ではありません。

Pythonを使ってプログラミングを紹介していますが、伝えたい内容はPythonに限らない「プログラミング全般」の知識です。

 

プログラマになるためのスキルを独学できる本です。

Pythonプログラミングの基本を学べるだけでなく、プログラマとして必要スキル(シェル正規表現パッケージ管理バージョン管理データ構造アルゴリズム仕事の始め方・やり方)もひと通り学べるのが特徴です。

プログラミングを始めたい」「できればその道でプロを目指してみたい」――そんな読者にオススメです。

 

本書の著者、コーリー・アルソフ(Cory Althoff)は、「独学プログラマー」です。

本書は、彼が独学で、ゼロからプログラミングを学んだ体験に基づいて書かれました。

プログラミングを独学で身に付けるために、著者がPythonを通して学んだエッセンスが書かれています

彼の独学プログラマーとしての学び方は、多くの人に支持されています

――訳者あとがきより

 

目次については、日経BOOKプラスの本書のページをご覧ください。

そこでは目次ページだけをまとめたPDFファイルや、本書に登場するリンクをまとめたPDFファイル、補足もご連絡いただけます

 

出た~~~!!!

Python入門の「2冊目」としては鉄板の本だと思う。

しか!!!…敢えて、私は読まないだろう!!!

別にひねくれている訳じゃなくて、もっと他に良い本が出てきたから。

ハズレではないので、この本を進めときゃいいでしょ的な安易さは拭えないが、あえてケチをつけるならば、各項目が「広く浅く」で物足りなさが残るから

中途半端な本という印象が拭えない。

プログラミングを全くやったことがない初心者が、Python文法を覚えた後、脱入門で中級へステップアップするときの足掛かりとしては、本書は良い指南書になるだろう。

鉄板の本なので、時間があれば後で図書館で借りて目を通してみたい。(買うとは言ってない)

 

[8] 増井敏克:基礎からプログラミングリテラシー技術評論社 (2019)

[asin:4297105144] 2019/4/17

プログラミングをはじめる前に読む1冊!

 

プログラミングブームエンジニア不足を背景にプログラミング独習をする方が増えています

いざ、Webで人気の講座を受講してみたり、店頭平積みになっているベストセラープログラミング書籍を手にしたものの、どれも理解できずに挫折してしまった、という方も多いのではないでしょうか。

コンピュータプログラミング解説がわからないのは、次のような知識の不足が要因です。

 

1.コンピュータのしくみがわからない

2.プログラミングのしくみがわからない

3.アプリケーションが動くしくみがわからない

4.開発スタイルエンジニア仕事像がわからない

5.業界の標準やツールが知らない

6.プログラミング書籍の選び方がわからない

 

これらは専門書やインターネット検索上位にくるWeb記事では前提知識として省略されることが多く「読み進めるにはほかの資料必要になった」なんてことがよくあります

そこで、本書ではプログラミング独習者がつまずきやす知識を厳選して取り上げ、初心者の分からなかったをサポートします。

図解を多用し、「サーバークライアント」、「コンパイラインタプリタ」のように用語比較しながら学習することで、いままで曖昧になっていた知識が整理され理解が進みます

プログラミング初心者必携の1冊です!

 

自分記憶に間違いがなければ、この本は1回図書館で借りて読んだことがあるような気がする。(表紙を見ておぼろげに思い出した)

この本は、中学生とか高校生レベル知識しかない人が、学校の「情報」の授業の補助教材として使うようなイメージがある。

京都大学先生京大生に勧める本としては、どうなんだろう?

 

プログラミング以前の疑問として、そもそもコンピューター(電子計算機)って何だろう?というような素朴な疑問を持つ人が、ハードウェアなどの仕組みを知りたいなら、情報処理技術者試験の教科書を読んだ方が手っ取り早いと思う。

  1. ITパスポート試験
  2. 基本情報技術者試験
  3. 応用情報技術者試験

大学受験経験して、知識の丸暗記に慣れている人なら、これらの資格試験教科書の方が、要点がコンパクトにまとまっていて、吸収しやすいのではないか

 

cf. 情報処理技術者試験 - Wikipedia

https://w.wiki/3cnP

https://www.ipa.go.jp/shiken/

 

とりあえず、Pythonとは直接関係なさそうなので、今の私なら読まない。

パソコン自作できるし、ハードウェア知識もある程度あるので、本書を読む時間があったら、他の本を読むだろう。

本書を読みたい人は、自己責任で読んで欲しい。

 

 

https://anond.hatelabo.jp/20230705022129 へ続く)

2023-07-04

8. オブジェクトとリスト

Python勉強メモ

ゼロからPython入門講座

8. オブジェクトリスト

https://www.python.jp/train/list/index.html

 

以下、気になったところ。

 

Pythonの型とオブジェクト

Pythonでは、整数実数文字列などのデータのことを、オブジェクト(Object) という用語で呼びます

Object英語で「物」とか「対象」とかい意味言葉ですが、Pythonでは、Python操作するいろいろな種類のデータプログラムなどのことを、まとめて オブジェクト と呼びます

 

オブジェクトの種類のことを、型 と呼びます

たとえば、数字の2は、整数型のオブジェクト文字列abc は、文字列型のオブジェクト という呼び方します。

次のプログラムは、関数 foo() を定義していますが、

def foo():

  print("hi!")

この foo も、 関数型のfooオブジェクト です。

import 文を使ってロードした モジュールオブジェクトです。

 

オブジェクト範囲

オブジェクトではないもの

演算子やwhile文 ・ if文 などはPythonに対する実行命令で、実体のあるオブジェクトではありません。

数値などの値のように、変数に代入したり、関数のように関数名を指定したりと、プログラマ名前をつけられるものオブジェクト

whileのようにつけられないものオブジェクトではない、

と考えると良いと思います

 

この説明だけでは、Pythonオブジェクトについて曖昧さが残りスッキリしない。

Python言語仕様で、オブジェクトはどうなっているのか?検索してみた。

 

google:python オブジェクト

 

cf.Python入門]Pythonオブジェクトとは - ITmedia

https://atmarkit.itmedia.co.jp/ait/articles/1907/12/news019.html

Python公式サイトにあるドキュメントオブジェクト、値、および型」では、Pythonにおけるオブジェクトとは「データ抽象的に表したもの」と表現されている。

まりPythonで書いたプログラム操作したり、処理したりするデータのことを「オブジェクト」という。

説明
int 整数」を表現する型
float 浮動小数点数」を表現する型
bool TrueFalseのいずれかの値を取り、真偽値(条件が成立しているかどうか)を表現する型
strUnicodeコードポイント値を任意の数だけ並べた「文字列」を表現する型(変更不可能
list 任意の型の要素を任意の数だけ並べた「リスト」を表現する型(変更可能
tuple 任意の型の要素を任意の数だけ並べた「タプル」を表現する型(変更不可能
dict キーと値の組からなる要素を任意の数だけ並べた「辞書」を表現する型(変更可能
set/frozenset任意の型の要素を任意の数だけ並べた順序のない「集合」を表現する型(setは変更可能。frozensetは変更不可能
function 関数」を表現する型
moduleモジュール」や「パッケージ」を表現する型

 

cf. 3. データモデルPython 3.11.4 ドキュメント

https://docs.python.org/ja/3/reference/datamodel.html#objects-values-and-types

Python における オブジェクト (object) とは、データ抽象的に表したものです。

Python プログラムにおけるデータは全て、オブジェクトまたはオブジェクト間の関係として表されます

(ある意味では、プログラムコードもまたオブジェクトとして表されます。これはフォン・ノイマン: Von Neumann の "プログラム記憶方式コンピュータ: stored program computer" のモデルに適合します。)

 

先に「プログラムデータ+処理」という話を挙げたが、

要するにPythonプログラムの中で処理(操作)できる対象すべてがデータであり、なおかつオブジェクトである」ということらしい。

 

上記の型の表を見ると、Pythonには「function」という関数オブジェクトもあるので、関数それ自体を1つのデータとして扱うことも可能

これを、「第一オブジェクト」という。

 

cf. 第一オブジェクト - Wikipedia

https://w.wiki/6wz4

第一オブジェクトファーストクラスオブジェクト、first-class object)は、あるプログラミング言語において、たとえば生成、代入、演算、(引数戻り値としての)受け渡しといったその言語における基本的操作制限なしに使用できる対象のことである

ここで「オブジェクト」とは広く対象物・客体を意味し、必ずしもオブジェクト指向プログラミングにおけるオブジェクト意味しない。

第一オブジェクトは「第一データ型に属す」という。

この言葉1960年代クリストファー・ストレイチーによって「functions as first-class citizens」という文脈で初めて使われた。

 

言語によって異なるが、第一オブジェクトは概ね次のような性質もつ

 

リスト

決まった順番に並んだ値で構成される情報は、Pythonでは リストオブジェクト表現します。

リストオブジェクトは、他のオブジェクトを 要素 として登録できるオブジェクトで、他のプログラミング言語では配列などと呼ばれることもあります

 

リストオブジェクトは、次のように 角カッコ [ と ] で作成します。

 

[要素1, 要素2, ...]

 

[ と ] の間には、リストの要素となるオブジェクトを、, で区切って指定します。

 

要素が登録されていない、空のリストは [] だけで作成します。

 

要素の参照

リストオブジェクト登録した要素は、次のような式で参照できます

 

リストオブジェクト[要素の順番]

 

リストオブジェクト登録した要素を参照するときは、リストオブジェクトに、参照する要素の順番を指定します。

最初の要素を参照するときは 0、その次は 1、のように指定します。

 

インデックス(添字)

ここで指定している要素の順番のことを、インデックス(添字) と言います

リスト最後の要素のインデックスは、リストの要素数 - 1 となります

 

インデックス(添字)は、1から始まるのではなく、0から始まる点に注意が必要

 

リスト操作

要素の挿入

リストに要素を追加するときには、リストメソッド である insert() を使用します。

 

挿入位置として、インデックスの最大値以上の値を指定すると、リストの末尾に要素を追加します。

 

要素の置き換え

登録済みの要素を別の要素に置き換えるときは、次のように記述します。

 

リストオブジェクト[インデックス] = 値

 

変数 の代入文とおなじ形式ですね。

代入文の左辺に指定できるインデックス値は、リストオブジェクト最後インデックス値 までです。

 

要素の削除

リストオブジェクト登録されている要素を削除するときには、del 文を使います

 

del リストオブジェクト[インデックス]

 

リストオブジェクトから指定したインデックスの要素を削除します。

del 文で指定できる要素のインデックスは、要素の置き換え と同じように、リストオブジェクト最後インデックス値 までです。

無効インデックス値を指定すると、エラーになります

 

while文を使ったリストループ処理

リストの長さを測るメソッド len()

リストオブジェクトの要素数を教えてくれる、len() という関数があります

関数 len() は、引数リストオブジェクト指定すると、その要素数を返してくれる関数です。

 

values = [1,2,3,4] # 要素数4のリスト

print(len(values))

4

 

for文によるループ

リストの要素を順番に参照する処理は非常によく行われるため、もっと簡単に書けるように、for 文 という、専用の文法が用意されています

 

for文の書き方

for 文は、次の形式記述します。

 

for 変数名 in リストオブジェクト:

  処理1

  処理2

  ...

 

for 文は、リストオブジェクト から要素を一つずつ順番に取り出し、それぞれの要素ごとに、for 文に続けて記述した処理を、一度ずつ実行します。

変数名 には、リストオブジェクトから取り出した要素を参照する変数名を指定します。

 

まとめ

2023-07-03

オブジェクト指向関数プログラミングとか

コメント書いてcopilotに提案もらってテストグリーンで動けばヨシで事足りるわけだが勉強する意味ってなんだろう

コメントgptに考えて貰えばいいわけだし

2023-07-02

3. 文字列と入出力

Python勉強メモ

ゼロからPython入門講座

https://www.python.jp/train/index.html

 

3. 文字列と入出力

https://www.python.jp/train/string/index.html

 

以下、気になったところ。

 

文字列と入出力

特になし。

 

文字列

特になし。

 

Pythonでは、文章人名などの文字からなるデータを、文字列 (string) といいます

いや、Pythonだけじゃなくて、他のプログラミング言語でも、文字からなるデータは「文字列」って呼ぶだろ?

文字列は、Python専売特許じゃねえだろ?

初心者勘違いさせるような言い方してんじゃねーよ?

 

文章人名など、文字からなるデータソースコードに書く場合には、数値と違って、文字前後を "(ダブルクォテーション) か '(シングルクォテーション) で囲んで記述します。

文字列は、とりあえずダブルクオーテーションで囲むと。

 

文字列演算子

文字列同士の足し算は、文字列の連結になります

文字列の "ABC" と "DEF" を足すと、"ABCDEF" になります

 

"ABC" + "DEF"

'ABCDEF'

 

データ型の違い

データには種類があり、数値型とか文字列型とかがある。

これはPythonに限った話ではなく、プログラミング言語全般共通の話。

数値型同士のデータ四則演算ができるけど、違う型のデータでは四則演算ができない。

 

文字列と数値

データ型を他のデータ型に変換することを「型変換」とか「キャスト」(cast)などと言ったりする。

Python 型変換」で検索すると詳しい解説が出てくる。

 

文字列の数値化

数字だけからなる文字列は、次のように int() を使って整数に変換できます

text = "123"

int(text)

123

 

数値の文字列

int() を使って文字列整数に変換するのとは逆に、str() を使って数値を文字列に変換できます

num = 123 # 整数

str(num)

'123'

 

処理するデータの型違いによるエラーは、基本的なうっかりミスの1つなので、常に型は意識してデータを扱いたい。

特にPythonのような動的型付け言語は、型を意識しなくてもプログラムが書けてしまうが、その分バグになりやすいので注意が必要だ。

いちいち型を気にするのは面倒くさいので、「型推論」というズボラな人向けの機能もある。

 

型推論 - Wikipedia

https://w.wiki/6wB2

型推論(かたすいろん、英: type inference)とはプログラミング言語機能の1つで、静的な型付けを持つ言語において、変数関数シグネチャの型を明示的に宣言しなくても、変数宣言における初期化のための初期値や、関数呼び出しにおける実引数などといった、周辺情報および文脈などから自動的に(暗黙的に)各々の型を決定する機構のこと。

言語によってはtype deductionと呼ばれることもある。

 

推論に失敗するとその時点でエラーを報告できるため、少なくとも誤った型を用いることによるバグ回避できる。

また、アルゴリズム記述に集中できるのでプログラム抽象度が上がるというメリットもある。

ただし型推論関数の多重定義オーバーロード)は相性が悪く、オーバーロードサポートする言語では型推論による恩恵が十分に受けられない(型推論ではシグネチャを一意に決めることができない)ケースがある。

 

Pythonには型推論機能がないので、プログラマーが工夫して型によるバグをなくすしかない。

Python 型推論」で検索すると、いろいろなTipsが紹介されている。

 

PythonVSCode型推論結果を自動で表示してくれるようになった【TypeHinting】

https://zenn.dev/yosemat/articles/36638f17e9ded8

 

最初のうちは、型によるエラーはあまり気にしなくても良いと思う。

エラーが出たらその都度つぶしていけばいいし、あとでテスト方法を学んだら、型を検査する方法も分かってくるはずだ。

 

print() 関数

特になし。

 

print() 関数は、引数として指定した値を画面に出力します。

 

input() 関数

特になし。

 

input() 関数を使うと、キーボードを使って、文字列データ入力できます

 

メソッド

嘘の説明があるなー。

初心者向けに便宜的な説明をしておこう、という趣旨は仕方がないかもしれないけど、後で訂正するというか、詳しく説明するという注意書きは必要だろう。

 

文字列などのデータには、そのデータ操作するための、専用の 関数 が結びついています

データに結びついた関数のことを、メソッド と呼びます

 

何が嘘かって、用語定義問題なんだけど、「メソッド」という言葉一般的に、オブジェクト指向プログラミング用語で、クラス定義されている関数のことをメソッドと呼んでいる。

しかし、教える順番として、クラスとかオブジェクトは後の方に出てくるなら、今の段階ではメソッドをどう説明すればいいのだろうか?

Python文字列は、実はStringクラスオブジェクトであり、Stringクラスには文字列操作するための様々なメソッド(処理)が用意されている、ということをクラス説明なしにするのは、ややこしいかもしれない。

なので、オブジェクトのことをここではざっくりと「データ」という言い方でごまかしている。

私のようなPython素人場合もっと良い説明方法が思い浮かばない。

とりあえず、ここではメソッドデータに紐づけられている関数ということにしておこう。

 

メソッド関数一種です。これまで見てきたように、特定データに結びつき、

データ.メソッド名()

形式で呼び出してデータ操作する関数を、メソッド と呼びます

メソッド は、結びついている データ対象として、処理を行います

 

念のため、この教材のオブジェクト説明を見てみた。

8. オブジェクトリスト Pythonの型とオブジェクト

https://www.python.jp/train/list/index.html

Pythonでは、これまで紹介してきたような、整数実数文字列などのデータのことを、オブジェクト(Object) という用語で呼びます

Object英語で「物」とか「対象」とかい意味言葉ですが、Pythonでは、Python操作するいろいろな種類のデータプログラムなどのことを、まとめて オブジェクト と呼びます

 

ここまで読んで、はじめてデータの種明かしがされて、Pythonデータオブジェクトであり、オブジェクトに用意されているメソッドが使えると。

せめて「詳しくは第8章のオブジェクト説明を読んでね」ぐらいは書いておいた方が良いと思う。

 

あと、オブジェクト説明もあまり良くないと思う。

なんでオブジェクトというデータ構造、仕組みを用意するのか?という根拠説明がスッポリと抜け落ちている。

一般的オブジェクト指向プログラミングOOP)の説明方法、教え方は様々だが、単純にはC言語構造体が出発点であり、「データに処理をくっつけたもの」という説明でいいだろう。

ちなみに、その反対に「処理にデータをくっつけたもの」をクロージャ―という。

オブジェクトクロージャ―もPythonだけの仕組み、話ではないので、他にもっと分かりやす説明方法があれば、そこから引用した方が良いだろう。

 

問題説明の順番で、前提となる知識がない段階では、どのようにごまかした説明で切り抜け、後で詳しい種明かしをするか?という教え方の設計インストラクショナル・デザイン)が問われている。

まりうまくごまかせていないところを見ると、もしかしたらPythonを教えている教師たちは、あまり頭が良くないのかもしれない?

 

まとめ

2023-06-30

Python学習日記

無学無才のポンコツが、1か月でプログラミング習得できるか?実験してみます

 

使用する無料の教材は、

Kyoto University Research Information Repository: プログラミング演習 Python 2021

https://repository.kulib.kyoto-u.ac.jp/dspace/handle/2433/265459

です。

 

目次

図目次

表目次

プログラム目次

演習目次

 

0. まえがき

0.1 目的と到達目標

0.2 屋上屋を重ねる理由

0.3 文科系がんばれ

0.4 本書の構成について

0.5 本書での表記

0.6 コピペに注意

0.7 2020 年度版からの変更

謝辞

 

1. コンピュータプログラミング

1.1 この章の目的

1.2 コンピュータプログラム

1.3 コンピュータの仕組み

1.4 プログラミング言語

1.5 プログラミング言語 Python

1.6 さまざまな応用

1.7 プログラミングの学び方

1.8 プログラム構成する基礎的な概念

1.9 プログラムの「どこ」を作るか

参考文献

 

2. Python の実行環境と使い方

2.1 本章の学習目標

2.2 学習環境の想定

2.3 準備

2.4 IDLE の起動

2.5 Python シェル

2.6 スクリプト作成と実行

2.7 Anaconda Prompt での作業フォルダの設定

2.8 IDLE のキー操作など

2.9 拡張子の表示

2.10 Python コマンドの実行

2.11 Python を学ぶ環境づくり

2.12 Mac ユーザ

参考文献

 

3. 変数演算,代入

3.1 本章の学習目標

3.2 プログラムの実行の流れと情報の流れ

3.3 変数名前

3.4 変数への代入と値の評価

3.5 代入演算

3.6 Python で使えるデータ

3.7 Python変数のより正しい理解

3.8 例題:平方根を求める

3.9 割り算に注意

3.10 読み易い式の表記

3.11 複数変数への代入

参考文献

 

4. リスト

4.1 本章の学習目標

4.2 Python Shell を用いた学習

4.3 リストとは

4.4 リストの生成

4.5 メソッド

4.6 リストの要素へのアクセス

4.7 負の添え字とスライス

4.8 リストへの追加,結合

4.9 リストの代入と複製

4.10 イミュータブルとミュータブル

4.11 浅いコピー,深いコピー

4.12 リスト可視化する

4.13 計算過程リストに残す

4.14 タプルと辞書

 

5. 制御構造

5.1 本章の学習目標

5.2 for 文による繰り返し処理

5.3 while 文による繰り返し

5.4 if 文による分岐

5.5 端末から入力

5.6 エラーへの対処

5.7 Python での数学関数

5.8 数値データ文字列の変換,文字列の結合

5.9 数値を表示する際のフォーマット指定

5.10 力試し

 

6. 京都交差点を作る

6.1 本章の学習目的

6.2 京都交差点を作る

6.3 リストリストとその走査

 

7. 関数を使った処理のカプセル化

7.1 本章の学習目標

7.2 絶対値関数を作ってみる

7.3 関数定義の書式

7.4 仮引数と実引数

7.5 返り値

7.6 前章の例題から

7.7 関数 square_root() を実装する

7.8 関数内の変数の扱い

7.9 関数の利用パターン

7.10 関数の呼び出しと関数オブジェクトの引き渡し

7.11 デフォルト引数値とキーワード引数

 

8. Turtle で遊ぶ

8.1 本章の学習目標

8.2 モジュール

8.3 Turtle ―由緒正しき亀さん

8.4 Python の Turtle モジュール

8.5 使ってみよう

8.6 Turtle モジュールの主な関数

8.7 複数のタートルを動かす

8.8 作品作りのためのヒント

8.9 Turtle Demo

8.10 課題 Turtle の作品制作

8.11 スクリーンショット撮り方

参考文献

 

9. Tkinter で作る GUI アプリケーション(1)

9.1 本章の学習目標

9.2 GUIイベント駆動プログラミング

9.3 モデルユーザーインターフェイスの分離

9.4 tkinter

9.5 tkinter の例題(tkdemo-2term.py)

9.6 tkinter を用いたプログラムの基本構成

9.7 grid によるレイアウト

9.8 lambda (λ)表現を使った Call Back 関数記述

9.9 ウィジェット体裁の調整

9.10 tkinter の終わり方

9.11 Frame クラス拡張する方式での実装

参考文献

 

10. Tkinter で作る GUI アプリケーション(2)

10.1 本章の学習目標

10.2 自律的動作するプログラムGUI との衝突

10.3 tkinter を用いたアナログ時計プログラム

10.4 変数を介した動作協調

 

11. クラス

11.1 本章の学習目標

11.2 オブジェクト指向プログラミング

11.3 Python でのクラスの書き方,使い方

11.4 クラス変数アクセス制限

11.5 継承

11.6 インスタンスを起点にクラス設計する

 

12. ファイル入出力

12.1 本章の学習目標

12.2 データを永続的に利用するには

12.3 ファイルについて

12.4 まずは動かしてみよう

12.5 Python でのファイルの読み書き

12.6 例題1 波の近似

12.7 例題2 テキストエディタ

 

13. 三目並べで学ぶプログラム開発

13.1 本章の学習目標

13.2 プログラムを開発するということ

13.3 設計手順―コンピュータを使う前にすること

13.4 三目並べを例にしたプログラム設計

13.5 プログラム実装

13.6 力試し

13.7 プログラムの開発に関連するいくつかの話題

 

14. Python学術利用

14.1 本章の学習目標

14.2 import 時の別名

14.3 NumPy

14.4 Matplotlib

14.5 pandas

14.6 課題

参考文献

 

15. 振り返りとこれから

15.1 本章の学習目標

15.2 振り返り

15.3 守破離

15.4 Python の利用環境

15.5 モジュール等の追加

15.6 本書で紹介しなかった話題

15.7 感謝と恩返し―学んだことをどう活かすのか

 

16. IDLE Python 便利帳

16.1 Python 便利メモ

16.2 ファイル名に注意

16.3 IDLE メモPython シェルキー操作

16.4 IDLE メモエディタ

 

17. IDLE/Python でのエラーメッセージの読み方

17.1 IDLE エディタが表示するエラー

17.2 実行時に Python Shell で表示されるエラー

学習するプログラミング言語の選定

プログラミングパラダイム

プログラミングパラダイム(考え方)は、(分類方法にもよるけど)主に2種類ある。

  1. 命令
  2. 宣言

 

命令プログラミング

https://w.wiki/6uCP

命令プログラミング(めいれいがたプログラミング、英: imperative programming)は、プログラム状態を変化させるステートメントを基本文に用いる総称的なプログラミングパラダイムである

ステートメントではコマンド命令文)が多用される。

宣言プログラミングと対をなしてのプログラミング言語の分類用語としても扱われている。

宣言型の数学性質に対して、命令型はノイマンコンピュータ向けの計算機科学特有性質である

このパラダイムは、手続き型、構造化、モジュラーオブジェクト指向などを包括している。

 

命令プログラミングは、例えるならば、買物のメモを作るのと似ている。

  1. 近所のスーパーマーケットに行く。
  2. 入口で買い物かごを取る。
  3. 食パンを1個かごに入れる。
  4. 牛乳を1本かごに入れる。
  5. 卵を1パックかごに入れる。
  6. もしも特売で安いツナ缶があった場合、1個かごに入れる。(ツナ缶通常価格であれば、かごに入れない。)
  7. レジに行き、精算する。
  8. サッカ台で買った商品を袋に詰める。
  9. 帰宅する。

 

命令プログラミングを細分化すると、

などの仕組みが含まれている。

 

命令プログラミングは、直観的に分かりやすいので、プログラミング学習の初手は命令型で良いだろう。

実際、プログラミング教育が必修化された小中高の授業では、プログラミング学習言語として命令言語が選定されている。

学習実験においても、命令プログラミング言語を選び、学校の教材に合わせて「Python」を学んでみよう。

 

Pythonパイソン)とは?

https://ja.wikipedia.org/wiki/Python

Pythonパイソン)はインタープリタ型の高水準汎用プログラミング言語である

Python1991年にグイド・ヴァンロッサムにより開発されたプログラミング言語である

最初リリースされたPython設計哲学は、ホワイトスペース(オフサイドルール)の顕著な使用によってコードの可読性を重視している。

その言語構成オブジェクト指向アプローチは、プログラマが小規模なプロジェクトから大規模なプロジェクトまで、明確で論理的コードを書くのを支援することを目的としている。

 

宣言プログラミング

https://w.wiki/6uCz

宣言プログラミング(英: Declarative programming)は、数理論理学的な性質を表わしている総称的なプログラミングパラダイムである

式の計算構造を、主に表示的意味論下のロジック表現する構文にされることが多く、式枠外の副作用を伴なう制御フロー自由変数の多用などは排除されるようになる。

計算構造演繹的に組み立てられることが多い。

命令プログラミングと対をなしてのプログラミング言語の分類用語としても扱われている。

 

宣言言語は、what the program must accomplish(何をなすべきか)方針で、副作用排除した式や純粋関数実装に努める。

これは命令言語の、how to accomplish it(どうなすべきか)方針で、副作用を前提にした操作意味論下のアルゴリズム実装とよく対比される。

宣言パラダイムは、関数型、論理型、データフローなどを包括し、データベース問い合わせ言語マークアップ言語ドメイン固有言語構成管理正規表現などにも言及されており、並行計算との親和性特筆されている。

 

宣言プログラミングを細分化すると、

などの仕組みが含まれている。

 

宣言プログラミング言語は、例えるなら秘書仕事を任せるのと似ている。

主人:「冷蔵庫食品がなくなったので、補充しといて!」

秘書:「分かりました。あとはすべておまかせください!」

冷蔵庫食品を補充する"やり方"は問わず冷蔵庫を満杯にするという"結果"を示して要求するのが宣言プログラミングの特徴だ。

実際に慣れると、宣言プログラミングの方が命令プログラミングよりも簡単に感じられるはずだが、宣言プログラミングにはちょっと"癖"があるので、慣れるまで時間がかかるかもしれない。(具体的には、"副作用"の排除人間直観に反している面もある、ということ)

 

リレーショナルデータベースを使う場合、「SQL」というプログラミング言語使用は避けて通れないので、宣言プログラミング言語SQLは問合せ型言語)も、順次学ぶことにしよう。

 

まとめ

  1. まずPythonを学ぶ。
  2. データベースを使う場面が出てきたら、SQLも学ぶ。
  3. その後、残りの関数プログラミング論理プログラミングも学び、一通りプログラミングパラダイム理解してみる。

2023-06-15

LGBTQQIAAPPO2S をオブジェクト指向表現すると

どういう構造になるんだろう。

 

とりあえず、orientation と identity のプロパティがあるのは確定だろうけど、それが持つ値を gender インターフェイス定義しなきゃいけないよな。

さらには現在の体の状態も持つ必要もあって、それは gender とは違うインターフェイスになるだろ?

アセクシャル場合、orientation はnull値だろうからnullableにする必要があり、バイのことを考えるとリスト表現する必要もある。

 

どこかに完全版を作った人いないかね。

2023-05-28

オブジェクト指向でよく見聞きする原則だのパターンだのは後出しじゃんけんだろう

今、どの設計が最適なのかなんてわかんねーよ

全体を見通して、こんな感じが良いだろうなんて想像つかねーよ

書いてから文句言われてもしらねーよ

お前ら未来予知でもしてんのか

ログイン ユーザー登録
ようこそ ゲスト さん