書籍概要

Software Design 20213月号

バックナンバー一覧

発売日
更新日

概要

第1特集
継承で消耗していませんか?
Javaでもう一度学び直すオブジェクト指向プログラミング

「処理の流れがわかりにくい,巨大なクラスを作ってしまった」「継承だらけでメンテナンスが大変なコードを書いてしまった」……オブジェクト指向プログラミングと聞くと,こんな経験を思い出す人もいるかもしれません。うかつに実装しようとすると,複雑で保守しづらいコードが生まれます。では,発展性の高いプログラムにつながる,適切なオブジェクト指向プログラミングとはどんなものでしょうか。本特集では,Javaを題材に,まずオブジェクト指向の基礎を復習し,さらに「クラス設計」「インターフェースの使い方」「コンポジション/列挙型」の3点について実践的に解説します。この機会に,もう一度オブジェクト指向に挑戦してみませんか?

第2特集
言語の壁を越えWebの可能性を広げる
WebAssembly入門

WebAssembly(Wasm)とは,ブラウザ上で動作するバイナリ形式の低水準言語です。JavaScriptが苦手とする高速な処理を担うために開発されました。各種コンパイラを使ってC++,Rust,Goなどで書かれたコードをWebAssemblyに変換し実行します。つまり,C++,Rust,Goなどのコードをブラウザで動かせるようになります。これにより,従来Webで動かすのが難しかったアプリケーションを実現できる可能性が出てきました。また,最近ではブラウザ外での応用も試みられるなど,活用の幅を広げています。本特集では,WebAssemblyの基本を知ることから始め,どのような応用が考えられるのか,その将来像を紹介します。

目次

第1特集
継承で消耗していませんか?
Javaでもう一度学び直す オブジェクト指向プログラミング

  • 第1章:オブジェクト指向への再入門
    三大要素の特長とその効果をおさえよう
    ……谷本 心
  • 第2章:Javaならではのオブジェクト指向とは
    言語の特徴から読み解く,あえてJavaで学ぶ理由
    ……水島 宏太
  • 第3章:クラスを適切に設計して独自の型を表現する
    StringクラスとLocalDateクラスから学ぶ3つの原則とは
    ……増田 亨
  • 第4章:型を基準に理解するインターフェースの使い方
    「実装のないクラス」でプログラムを整理する
    ……増田 亨
  • 第5章:継承疲れに効くコンポジション/列挙型のススメ
    安易な継承を避け,柔軟で安定したプログラムを作るために
    ……増田 亨

第2特集
言語の壁を越えWebの可能性を広げる
WebAssembly入門

  • 第1章ブラウザ上で動く新たな言語
    WebAssemblyの登場の経緯と利用方法
    ……山本 悠滋
  • 第2章ユーザー体験をも変える!?
    Wasmで広がるWebアプリの可能性
    ……折原 レオナルド賢
  • 第3章ブラウザ外Wasm最前線
    WASIとProxy-Wasm
    ……米田 武

Premium Product Review

  • ヤマハネットワーク通信
    【2】Luaスクリプト,やらまいか……平野 尚志

連載

  • ITエンジニア必須の最新用語解説
    【147】etcd……杉山 貴章
  • Unveil it! 開ければわかる!
    【10】Apple Silicon M1の徹底解析……清水 洋治
  • 結城浩の再発見の発想法
    【94】SLA……結城 浩
  • 高校数学Tip of the Month
    【7】確率のエッセンス……刀根 諒
  • 【新連載】イラストで明解Gitコマンド
    【1】git status……大串 肇
  • 【新連載】明後日のコンピューティングを知ろう
    【1】サイバー空間の見える化……松本 直人
  • めそ子が聞く!!
    【10】サーバ管理が不要に!? サーバレスってなんですか?……クラスメソッド 木村(作),エクスデザイン ninnzinn(画)
  • ひみつのLinux通信
    【85】違いのわかる人……くつなりょうすけ
  • “学習する”チームで仕事をする
    【2】1on1とマネジメントのステップ……広木 大地
  • 脆弱性のふさぎかた
    【2】Pythonの脆弱性~ReDoS~……中島 明日香
  • はじめてのAIチャットボット開発
    【3】チャットボットと写真でコミュニケーションしてみよう……金谷 拓哉,高橋 永成
  • チーム開発の視点が変わる アジャイル開発の新常識
    【4】初めての新規サービス開発(実践編)……平岡 正寿,梶原 直人(監修)
  • ディープラーニングではじめるソフトウェア高速化入門
    【5】GPUプログラミングことはじめ……平櫛 貴章
  • DevOpsエンジニアのための節約・簡単・時短レシピ
    【7】クラウドサーバからの配信メールが迷惑メールと判定されないようにするためのTips……星川 真麻
  • パズルで鍛えるアルゴリズム力
    【8】文字列パズルをとおして,動的計画法を学ぶ……けんちょん(大槻 兼資)
  • Ansible問題解決マップ
    【20】GitLabのWebhookを使ってAWXと連携する……大嶋 健容
  • Visual Studio Code快適生活
    【27】VS CodeからGitHub Gistで文書やコードを公開・管理してみよう……職業「戸倉彩」
  • Vimの細道
    【59】VimをIDEに改造する端末機能「terminal」……mattn
  • Rustで挑戦 ネットワークプログラミング
    【3】UDPのしくみを知ろう……小野 輝也
  • ルータ実践活用「NextHop」
    【6】テレワークで今こそ見直すVPN……濱田 康貴
  • 月刊Fedoraジャーナル
    【10】CentOS Stream入門……森若 和雄
  • Monthly News from jus
    【113】レジェンドに訊く関西のITの歴史……古川 菜摘
  • あなたのスキルは社会に役立つ~エンジニアだからできる社会貢献~
    【111】チャットボットを利用した災害情報調査システムの開発と活用……嘉山 陽一

サポート

ダウンロード

P.150 連載「Rustで挑戦 ネットワークプログラミング」

本記事で紹介したRustのサンプルコードを以下からダウンロードできます。ダウンロードファイル「sample_code.zip」は圧縮ファイルです。解凍したうえでご利用ください。
サンプルコードの利用方法は,記事の内容を参照してください。

ダウンロード
サンプルコード(sample_code.zip)

免責:本サンプルを使用することによって,使用者が受けたあらゆる不利益に対して,原著者および技術評論社はその責任を負いません。

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2021年3月16日最終更新)

P.22,第1特集第1章「オブジェクト指向への再入門」,リスト3の1行目

interface JankenStrategy {
public interface JankenStrategy {

P.22,第1特集第1章「オブジェクト指向への再入門」,リスト4の8~12行目

Hand selectHand() {
    return hand;
}

void notifyResult(boolean result, Hand playerHand) {
public Hand selectHand() {
    return hand;
}

public void notifyResult(boolean result, Hand playerHand) {

P.22,第1特集第1章「オブジェクト指向への再入門」,リスト5の2~6行目

if (Strategy == 1) {
    strategy = new AlwaysStrategy(Hand.Paa);
} else if (selectedStrategy == 2) {
    strategy = new AlwaysSameStrategy(Hand.Guu);
} else if (selectedStrategy == 3) {
// int selectedStrategyが引数として与えられる
if (selectedStrategy == 1) {
    strategy = new AlwaysSameStrategy(Hand.Paa);
} else if (selectedStrategy == 2) {
    strategy = new AlwaysSameStrategy(Hand.Guu);
} else if (selectedStrategy == 3) {

P.23,第1特集第1章「オブジェクト指向への再入門」,リスト6の4~8行目

Hand selectHand() {
    return hand;
}

void notifyResult(boolean result, Hand playerHand) {
public Hand selectHand() {
    return hand;
}

public void notifyResult(boolean result, Hand playerHand) {

P.23,第1特集第1章「オブジェクト指向への再入門」,リスト7の5~9行目

case Hand.Guu:
    return Hand.Paa;
case Hand.Choki:
    return Hand.Guu;
case Hand.Paa:
case Guu:
    return Hand.Paa;
case Choki:
    return Hand.Guu;
case Paa:

商品一覧