パッケージ設計のポイント
- 作者: ロバート・C・マーチン,瀬谷啓介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/06/30
- メディア: 単行本
- 購入: 3人 クリック: 236回
- この商品を含むブログ (146件) を見る
上の本に書いてあった内容の紹介、パッケージ内部の凝集度とパッケージ同士の結合に分類されて紹介されていた。
デザインパターンとかマルチパラダイムデザインとは、異なりパッケージの設計に視点を置いたものも見たことがなかったので、新鮮な感じ。。。
パッケージ内の凝集度に関連する原則の一つ
■再利用・リソース等価の原則(REP:Reuse Resouce-Release Equivalent Principle)
再利用の単位(パッケージ)がリリースの単位と等価であるべきという原則。
確かに再利用する時にパッケージの一部のクラスしか再利用できないような状況になると、利用する側としてはパッケージに余計な機能が入っている思うし、不便やな。
新人エンジニアに向けオススメ書籍
エンジニアとして就職したけど、何をするのか不安で一杯。そんな、新人エンジニアにオススメの書籍を紹介しようと思います。
書籍もありますが、中古や専門書のある大きい図書館を使うとかして、やりくりしてください。
①リーダブルコード
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 68人 クリック: 1,802回
- この商品を含むブログ (131件) を見る
多くの人が紹介しているように、本当に読みやすく、理解しやすい。コードを書く際に気を付けるべきことを効率よく理解できる本です。
ぜひ、これを読んで自分以外の人間がコードを見るんだ、見やすいように書かないといけないんだということを、早めにわかってほしいです。
②C++ Coding Standards
C++ Coding Standards―101のルール、ガイドライン、ベストプラクティス (C++ in‐depth series)
- 作者: ハーブサッター,アンドレイアレキサンドレスク,浜田光之,Herb Sutter,Andrei Alexandrescu,浜田真理
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2005/10
- メディア: 単行本
- 購入: 20人 クリック: 383回
- この商品を含むブログ (98件) を見る
C++向けのコーディングにおけるマナーの本です。C++を書く方は必ず読んでください。C++でやってはいけないことが一杯かいてあります。つまり、この本に書いてあるやってはいけないことを、仕事のプログラミングでもやってはいけない。
この本は、内容が簡潔過ぎて難しいので、読んですぐに理解はできないです。リーダブルコードのわかりやすさと逆ですね。
あえて紹介するのは、この本の内容には、コーディングのみでなく設計に関する内容ものっており、薄さの割に多くの関連書籍をもっている。だから、この本の内容を理解したというのは、C++のコードを書くものとして一人前という一つの指標になるからです。
※
紹介したけど、絶版となっていると思います。急いで手に入れたほうがいいと思います。
③頭とからだで覚えるデザインパターンの基本
Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本
- 作者: Eric Freeman,Elisabeth Freeman,Kathy Sierra,Bert Bates,佐藤直生,木下哲也,有限会社福龍興業
- 出版社/メーカー: オライリージャパン
- 発売日: 2005/12/02
- メディア: 大型本
- 購入: 14人 クリック: 362回
- この商品を含むブログ (98件) を見る
デザインパターンの書籍は数あれど、この本みたいなノリで説明しているものはないと思います。
この本の流れは、
ソフトウェアを開発したんだ。こんな感じにね。エクセレントだろ!
↓
ちょっと待ってください。この設計ではこんな問題が発生しちゃいますよ!!
↓
マジか! この問題は、なにをしたら解決できるんだ!!!
という流れがあってから、デザインパターンを適用しています。どんな問題を解決するために、デザインパターンを用いるかがわかりやすいので、デザインパターンを誤って利用するという病気が発症しづらくなると思います。
④ノンデザイナーズ・デザインブック
- 作者: Robin Williams,吉川典秀
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2008/11/19
- メディア: 単行本(ソフトカバー)
- 購入: 58人 クリック: 1,019回
- この商品を含むブログ (107件) を見る
ソフトウェア関連の本ではないのですが、仕事をする上で必ず誰かに説明するというシチュエーションは発生します。
そんなときの資料づくり役立つ本です。というか新人の方は、どこかのタイミングで皆の前で成果発表とすると思うので、わりかし早いタイミングでこの手の本は必要になると思います。
Linux環境向けのtchar.h
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
- 作者: 青木峰郎
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/07/27
- メディア: 単行本
- 購入: 35人 クリック: 450回
- この商品を含むブログ (150件) を見る
前回の記事の続きでLinux向けのtcharをつくったよという話。
windowsのtcharから定義を抜き出しただけですが....
========================================
#define _tcstoui64_l _wcstoui64_l #define _tstof_l _wtof_l #define _tstol_l _wtol_l #define _tstoi_l _wtoi_l #define _tstoi64_l _wtoi64_l #define _itot_s _itow_s #define _ltot_s _ltow_s #define _ultot_s _ultow_s #define _itot _itow #define _ltot _ltow #define _ultot _ultow #define _ttoi _wtoi #define _ttol _wtol #define _ttoi64 _wtoi64 #define _i64tot_s _i64tow_s #define _ui64tot_s _ui64tow_s #define _i64tot _i64tow #define _ui64tot _ui64tow /* String functions */ #define _tcscat wcscat #define _tcscat_s wcscat_s #define _tcschr wcschr #define _tcscpy wcscpy #define _tcscpy_s wcscpy_s #define _tcscspn wcscspn #define _tcslen wcslen #define _tcsnlen wcsnlen #define _tcsncat wcsncat #define _tcsncat_s wcsncat_s #define _tcsncat_l _wcsncat_l #define _tcsncat_s_l _wcsncat_s_l #define _tcsncpy wcsncpy #define _tcsncpy_s wcsncpy_s #define _tcsncpy_l _wcsncpy_l #define _tcsncpy_s_l _wcsncpy_s_l #define _tcspbrk wcspbrk #define _tcsrchr wcsrchr #define _tcsspn wcsspn #define _tcsstr wcsstr #define _tcstok wcstok #define _tcstok_s wcstok_s #define _tcstok_l _wcstok_l #define _tcstok_s_l _wcstok_s_l #define _tcserror _wcserror #define _tcserror_s _wcserror_s #define __tcserror __wcserror #define __tcserror_s __wcserror_s #define _tcsdup _wcsdup #define _tcsnset _wcsnset #define _tcsnset_s _wcsnset_s #define _tcsnset_l _wcsnset_l #define _tcsnset_s_l _wcsnset_s_l #define _tcsrev _wcsrev #define _tcsset _wcsset #define _tcsset_s _wcsset_s #define _tcsset_l _wcsset_l #define _tcsset_s_l _wcsset_s_l #define _tcscmp wcscmp #define _tcsicmp _wcsicmp #define _tcsicmp_l _wcsicmp_l #define _tcsnccmp wcsncmp #define _tcsncmp wcsncmp #define _tcsncicmp _wcsnicmp #define _tcsncicmp_l _wcsnicmp_l #define _tcsnicmp _wcsnicmp #define _tcsnicmp_l _wcsnicmp_l #define _tcscoll wcscoll #define _tcscoll_l _wcscoll_l #define _tcsicoll _wcsicoll #define _tcsicoll_l _wcsicoll_l #define _tcsnccoll _wcsncoll #define _tcsnccoll_l _wcsncoll_l #define _tcsncoll _wcsncoll #define _tcsncoll_l _wcsncoll_l #define _tcsncicoll _wcsnicoll #define _tcsncicoll_l _wcsnicoll_l #define _tcsnicoll _wcsnicoll #define _tcsnicoll_l _wcsnicoll_l #ifdef _DEBUG #define _tcsdup_dbg _wcsdup_dbg #endif /* Execute functions */ #define _texecl _wexecl #define _texecle _wexecle #define _texeclp _wexeclp #define _texeclpe _wexeclpe #define _texecv _wexecv #define _texecve _wexecve #define _texecvp _wexecvp #define _texecvpe _wexecvpe #define _tspawnl _wspawnl #define _tspawnle _wspawnle #define _tspawnlp _wspawnlp #define _tspawnlpe _wspawnlpe #define _tspawnv _wspawnv #define _tspawnve _wspawnve #define _tspawnvp _wspawnvp #define _tspawnvp _wspawnvp #define _tspawnvpe _wspawnvpe #define _tsystem _wsystem /* Time functions */ #define _tasctime _wasctime #define _tctime _wctime #define _tctime32 _wctime32 #define _tctime64 _wctime64 #define _tstrdate _wstrdate #define _tstrtime _wstrtime #define _tutime _wutime #define _tutime32 _wutime32 #define _tutime64 _wutime64 #define _tcsftime wcsftime #define _tcsftime_l _wcsftime_l #define _tasctime_s _wasctime_s #define _tctime_s _wctime_s #define _tctime32_s _wctime32_s #define _tctime64_s _wctime64_s #define _tstrdate_s _wstrdate_s #define _tstrtime_s _wstrtime_s /* Directory functions */ #define _tchdir _wchdir #define _tgetcwd _wgetcwd #define _tgetdcwd _wgetdcwd #define _tgetdcwd_nolock _wgetdcwd_nolock #define _tmkdir _wmkdir #define _trmdir _wrmdir #ifdef _DEBUG #define _tgetcwd_dbg _wgetcwd_dbg #define _tgetdcwd_dbg _wgetdcwd_dbg #define _tgetdcwd_lk_dbg _wgetdcwd_lk_dbg #endif /* Environment/Path functions */ #define _tfullpath _wfullpath #define _tgetenv _wgetenv #define _tgetenv_s _wgetenv_s #define _tdupenv_s _wdupenv_s #define _tmakepath _wmakepath #define _tmakepath_s _wmakepath_s #define _tpgmptr _wpgmptr #define _get_tpgmptr _get_wpgmptr #define _tputenv _wputenv #define _tputenv_s _wputenv_s #define _tsearchenv _wsearchenv #define _tsearchenv_s _wsearchenv_s #define _tsplitpath _wsplitpath #define _tsplitpath_s _wsplitpath_s #ifdef _DEBUG #define _tfullpath_dbg _wfullpath_dbg #define _tdupenv_s_dbg _wdupenv_s_dbg #endif /* Stdio functions */ #define _tfdopen _wfdopen #define _tfsopen _wfsopen #define _tfopen _wfopen #define _tfopen_s _wfopen_s #define _tfreopen _wfreopen #define _tfreopen_s _wfreopen_s #define _tperror _wperror #define _tpopen _wpopen #define _ttempnam _wtempnam #define _ttmpnam _wtmpnam #define _ttmpnam_s _wtmpnam_s #ifdef _DEBUG #define _ttempnam_dbg _wtempnam_dbg #endif /* Io functions */ #define _taccess _waccess #define _taccess_s _waccess_s #define _tchmod _wchmod #define _tcreat _wcreat #define _tfindfirst _wfindfirst #define _tfindfirst32 _wfindfirst32 #define _tfindfirst64 _wfindfirst64 #define _tfindfirsti64 _wfindfirsti64 #define _tfindfirst32i64 _wfindfirst32i64 #define _tfindfirst64i32 _wfindfirst64i32 #define _tfindnext _wfindnext #define _tfindnext32 _wfindnext32 #define _tfindnext64 _wfindnext64 #define _tfindnexti64 _wfindnexti64 #define _tfindnext32i64 _wfindnext32i64 #define _tfindnext64i32 _wfindnext64i32 #define _tmktemp _wmktemp #define _tmktemp_s _wmktemp_s #define _topen _wopen #define _tremove _wremove #define _trename _wrename #define _tsopen _wsopen #define _tsopen_s _wsopen_s #define _tunlink _wunlink #define _tfinddata_t _wfinddata_t #define _tfinddata32_t _wfinddata32_t #define _tfinddata64_t _wfinddata64_t #define _tfinddatai64_t _wfinddatai64_t #define _tfinddata32i64_t _wfinddata32i64_t #define _tfinddata64i32_t _wfinddata64i32_t /* Stat functions */ #define _tstat _wstat #define _tstat32 _wstat32 #define _tstat32i64 _wstat32i64 #define _tstat64 _wstat64 #define _tstat64i32 _wstat64i32 #define _tstati64 _wstati64 /* Setlocale functions */ #define _tsetlocale _wsetlocale /* Redundant "logical-character" mappings */ #define _tcsclen wcslen #define _tcscnlen wcsnlen #define _tcsclen_l(_String, _Locale) wcslen(_String) #define _tcscnlen_l(_String, _Max_count, _Locale) wcsnlen((_String), (_Max_count)) #define _tcsnccat wcsncat #define _tcsnccat_s wcsncat_s #define _tcsnccat_l _wcsncat_l #define _tcsnccat_s_l _wcsncat_s_l #define _tcsnccpy wcsncpy #define _tcsnccpy_s wcsncpy_s #define _tcsnccpy_l _wcsncpy_l #define _tcsnccpy_s_l _wcsncpy_s_l #define _tcsncset _wcsnset #define _tcsncset_s _wcsnset_s #define _tcsncset_l _wcsnset_l #define _tcsncset_s_l _wcsnset_s_l #define _tcsdec _wcsdec #define _tcsinc _wcsinc #define _tcsnbcnt _wcsncnt #define _tcsnccnt _wcsncnt #define _tcsnextc _wcsnextc #define _tcsninc _wcsninc #define _tcsspnp _wcsspnp #define _tcslwr _wcslwr #define _tcslwr_l _wcslwr_l #define _tcslwr_s _wcslwr_s #define _tcslwr_s_l _wcslwr_s_l #define _tcsupr _wcsupr #define _tcsupr_l _wcsupr_l #define _tcsupr_s _wcsupr_s #define _tcsupr_s_l _wcsupr_s_l #define _tcsxfrm wcsxfrm #define _tcsxfrm_l _wcsxfrm_l /* ctype functions */ #define _istalnum iswalnum #define _istalnum_l _iswalnum_l #define _istalpha iswalpha #define _istalpha_l _iswalpha_l #define _istascii iswascii #define _istcntrl iswcntrl #define _istcntrl_l _iswcntrl_l #define _istdigit iswdigit #define _istdigit_l _iswdigit_l #define _istgraph iswgraph #define _istgraph_l _iswgraph_l #define _istlower iswlower #define _istlower_l _iswlower_l #define _istprint iswprint #define _istprint_l _iswprint_l #define _istpunct iswpunct #define _istpunct_l _iswpunct_l #define _istspace iswspace #define _istspace_l _iswspace_l #define _istupper iswupper #define _istupper_l _iswupper_l #define _istxdigit iswxdigit #define _istxdigit_l _iswxdigit_l #define _totupper towupper #define _totupper_l _towupper_l #define _totlower towlower #define _totlower_l _towlower_l #endif // _WIN32
========================================
tchar.hはLinux環境には存在しない!
プログラムで文字列を扱うときに、Windows環境ではTCHAR型を使う。しかし、このコードをLinux環境でビルドしたら、_Tの定義がない、TCHARの定義がないと大量のコンパイルエラーが吐かれた。
以下の"Portable Libraries and TCHAR"を見ると、ほとんどのポータブルライブラリは、ヘッダ中で#define TCHAR wchar_tとしているそうです。
Tips on Using Unicode with C/C++ LG #147
つまり、自前でtchar.hを作成する必要があるのか?
■
googlemockがVS2013でビルドできないどーーー